endpoint = $endpoint; $this->api = $api; $this->jsonFormatter = $jsonFormatter ?: new JsonBody($this->api); $this->contentType = JsonBody::getContentType($api); } /** * When invoked with an AWS command, returns a serialization array * containing "method", "uri", "headers", and "body" key value pairs. * * @param CommandInterface $command Command to serialize into a request. * @param $endpointProvider Provider used for dynamic endpoint resolution. * @param $clientArgs Client arguments used for dynamic endpoint resolution. * * @return RequestInterface */ public function __invoke( CommandInterface $command, $endpoint = null ) { $operationName = $command->getName(); $operation = $this->api->getOperation($operationName); $commandArgs = $command->toArray(); $body = $this->jsonFormatter->build($operation->getInput(), $commandArgs); $headers = [ 'X-Amz-Target' => $this->api->getMetadata('targetPrefix') . '.' . $operationName, 'Content-Type' => $this->contentType, 'Content-Length' => strlen($body) ]; if ($endpoint instanceof RulesetEndpoint) { $this->setEndpointV2RequestOptions($endpoint, $headers); } $requestUri = $operation['http']['requestUri'] ?? null; $absoluteUri = str_ends_with($this->endpoint, '/') ? $this->endpoint : $this->endpoint . $requestUri; return new Request( $operation['http']['method'], $absoluteUri, $headers, $body ); } }