diff options
Diffstat (limited to 'vendor/aws/aws-sdk-php/src/Api/Serializer/JsonRpcSerializer.php')
-rw-r--r-- | vendor/aws/aws-sdk-php/src/Api/Serializer/JsonRpcSerializer.php | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/vendor/aws/aws-sdk-php/src/Api/Serializer/JsonRpcSerializer.php b/vendor/aws/aws-sdk-php/src/Api/Serializer/JsonRpcSerializer.php new file mode 100644 index 0000000..508766e --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/Api/Serializer/JsonRpcSerializer.php @@ -0,0 +1,92 @@ +<?php +namespace Aws\Api\Serializer; + +use Aws\Api\Service; +use Aws\CommandInterface; +use Aws\EndpointV2\EndpointProviderV2; +use Aws\EndpointV2\EndpointV2SerializerTrait; +use GuzzleHttp\Psr7\Request; +use Psr\Http\Message\RequestInterface; + +/** + * Prepares a JSON-RPC request for transfer. + * @internal + */ +class JsonRpcSerializer +{ + use EndpointV2SerializerTrait; + + /** @var JsonBody */ + private $jsonFormatter; + + /** @var string */ + private $endpoint; + + /** @var Service */ + private $api; + + /** @var string */ + private $contentType; + + /** + * @param Service $api Service description + * @param string $endpoint Endpoint to connect to + * @param JsonBody $jsonFormatter Optional JSON formatter to use + */ + public function __construct( + Service $api, + $endpoint, + JsonBody $jsonFormatter = null + ) { + $this->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, + $endpointProvider = null, + $clientArgs = null + ) + { + $operationName = $command->getName(); + $operation = $this->api->getOperation($operationName); + $commandArgs = $command->toArray(); + $headers = [ + 'X-Amz-Target' => $this->api->getMetadata('targetPrefix') . '.' . $operationName, + 'Content-Type' => $this->contentType + ]; + + if ($endpointProvider instanceof EndpointProviderV2) { + $this->setRequestOptions( + $endpointProvider, + $command, + $operation, + $commandArgs, + $clientArgs, + $headers + ); + } + + return new Request( + $operation['http']['method'], + $this->endpoint, + $headers, + $this->jsonFormatter->build( + $operation->getInput(), + $commandArgs + ) + ); + } +} |