diff options
Diffstat (limited to 'vendor/aws/aws-sdk-php/src/Api/ShapeMap.php')
-rw-r--r-- | vendor/aws/aws-sdk-php/src/Api/ShapeMap.php | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/vendor/aws/aws-sdk-php/src/Api/ShapeMap.php b/vendor/aws/aws-sdk-php/src/Api/ShapeMap.php new file mode 100644 index 0000000..b576e9b --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/Api/ShapeMap.php @@ -0,0 +1,68 @@ +<?php +namespace Aws\Api; + +/** + * Builds shape based on shape references. + */ +class ShapeMap +{ + /** @var array */ + private $definitions; + + /** @var Shape[] */ + private $simple; + + /** + * @param array $shapeModels Associative array of shape definitions. + */ + public function __construct(array $shapeModels) + { + $this->definitions = $shapeModels; + } + + /** + * Get an array of shape names. + * + * @return array + */ + public function getShapeNames() + { + return array_keys($this->definitions); + } + + /** + * Resolve a shape reference + * + * @param array $shapeRef Shape reference shape + * + * @return Shape + * @throws \InvalidArgumentException + */ + public function resolve(array $shapeRef) + { + $shape = $shapeRef['shape']; + + if (!isset($this->definitions[$shape])) { + throw new \InvalidArgumentException('Shape not found: ' . $shape); + } + + $isSimple = count($shapeRef) == 1; + if ($isSimple && isset($this->simple[$shape])) { + return $this->simple[$shape]; + } + + $definition = $shapeRef + $this->definitions[$shape]; + $definition['name'] = $definition['shape']; + if (isset($definition['shape'])) { + unset($definition['shape']); + } + + $result = Shape::create($definition, $this); + + if ($isSimple) { + $this->simple[$shape] = $result; + } + + return $result; + } +} |