diff options
Diffstat (limited to 'vendor/aws/aws-sdk-php/src/Api/Parser/MetadataParserTrait.php')
-rw-r--r-- | vendor/aws/aws-sdk-php/src/Api/Parser/MetadataParserTrait.php | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/vendor/aws/aws-sdk-php/src/Api/Parser/MetadataParserTrait.php b/vendor/aws/aws-sdk-php/src/Api/Parser/MetadataParserTrait.php new file mode 100644 index 0000000..e64d5a8 --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/Api/Parser/MetadataParserTrait.php @@ -0,0 +1,90 @@ +<?php +namespace Aws\Api\Parser; + +use Aws\Api\DateTimeResult; +use Aws\Api\Shape; +use Psr\Http\Message\ResponseInterface; + +trait MetadataParserTrait +{ + /** + * Extract a single header from the response into the result. + */ + protected function extractHeader( + $name, + Shape $shape, + ResponseInterface $response, + &$result + ) { + $value = $response->getHeaderLine($shape['locationName'] ?: $name); + + switch ($shape->getType()) { + case 'float': + case 'double': + $value = (float) $value; + break; + case 'long': + $value = (int) $value; + break; + case 'boolean': + $value = filter_var($value, FILTER_VALIDATE_BOOLEAN); + break; + case 'blob': + $value = base64_decode($value); + break; + case 'timestamp': + try { + $value = DateTimeResult::fromTimestamp( + $value, + !empty($shape['timestampFormat']) ? $shape['timestampFormat'] : null + ); + break; + } catch (\Exception $e) { + // If the value cannot be parsed, then do not add it to the + // output structure. + return; + } + case 'string': + if ($shape['jsonvalue']) { + $value = $this->parseJson(base64_decode($value), $response); + } + break; + } + + $result[$name] = $value; + } + + /** + * Extract a map of headers with an optional prefix from the response. + */ + protected function extractHeaders( + $name, + Shape $shape, + ResponseInterface $response, + &$result + ) { + // Check if the headers are prefixed by a location name + $result[$name] = []; + $prefix = $shape['locationName']; + $prefixLen = strlen($prefix); + + foreach ($response->getHeaders() as $k => $values) { + if (!$prefixLen) { + $result[$name][$k] = implode(', ', $values); + } elseif (stripos($k, $prefix) === 0) { + $result[$name][substr($k, $prefixLen)] = implode(', ', $values); + } + } + } + + /** + * Places the status code of the response into the result array. + */ + protected function extractStatus( + $name, + ResponseInterface $response, + array &$result + ) { + $result[$name] = (int) $response->getStatusCode(); + } +} |