summaryrefslogtreecommitdiff
path: root/vendor/aws/aws-sdk-php/src/Api/Parser/MetadataParserTrait.php
diff options
context:
space:
mode:
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.php90
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();
+ }
+}