diff options
Diffstat (limited to 'vendor/aws/aws-sdk-php/src/Api/Parser/JsonParser.php')
-rw-r--r-- | vendor/aws/aws-sdk-php/src/Api/Parser/JsonParser.php | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/vendor/aws/aws-sdk-php/src/Api/Parser/JsonParser.php b/vendor/aws/aws-sdk-php/src/Api/Parser/JsonParser.php new file mode 100644 index 0000000..ef98154 --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/Api/Parser/JsonParser.php @@ -0,0 +1,71 @@ +<?php +namespace Aws\Api\Parser; + +use Aws\Api\DateTimeResult; +use Aws\Api\Shape; + +/** + * @internal Implements standard JSON parsing. + */ +class JsonParser +{ + public function parse(Shape $shape, $value) + { + if ($value === null) { + return $value; + } + + switch ($shape['type']) { + case 'structure': + if (isset($shape['document']) && $shape['document']) { + return $value; + } + $target = []; + foreach ($shape->getMembers() as $name => $member) { + $locationName = $member['locationName'] ?: $name; + if (isset($value[$locationName])) { + $target[$name] = $this->parse($member, $value[$locationName]); + } + } + if (isset($shape['union']) + && $shape['union'] + && is_array($value) + && empty($target) + ) { + foreach ($value as $key => $val) { + $target['Unknown'][$key] = $val; + } + } + return $target; + + case 'list': + $member = $shape->getMember(); + $target = []; + foreach ($value as $v) { + $target[] = $this->parse($member, $v); + } + return $target; + + case 'map': + $values = $shape->getValue(); + $target = []; + foreach ($value as $k => $v) { + $target[$k] = $this->parse($values, $v); + } + return $target; + + case 'timestamp': + return DateTimeResult::fromTimestamp( + $value, + !empty($shape['timestampFormat']) ? $shape['timestampFormat'] : null + ); + + case 'blob': + return base64_decode($value); + + default: + return $value; + } + } +} + |