client = $client; $this->messageFactory = $messageFactory; } protected function getClient() : HttpAsyncClient { return $this->client; } protected function createOptionsResolver() : OptionsResolver { $resolver = new OptionsResolver(); // Every query can have page and per_page $resolver->setDefined('page') ->setAllowedTypes('page', 'int') ->setAllowedValues('page', function ($value) { return $value > 0; }) ->setDefined('per_page') ->setAllowedTypes('per_page', 'int') ->setAllowedValues('per_page', function ($value) { return $value > 0 && $value <= 100; }); return $resolver; } protected function getBooleanNormaliser() : callable { return function ($value) { return $value === true ? 'true' : 'false'; }; } protected function encodeObjectPath(string $path) : string { return str_replace('.', '%2E', rawurlencode($path)); } /** * @param string $path * @param array $parameters * @return Promise * @throws \Exception */ protected function post(string $path, array $parameters) : Promise { $uri = $path; $request = $this->messageFactory->createRequest( 'POST', $uri, [], QueryString::build($parameters)); return $this->getClient()->sendAsyncRequest($request); } }