| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- <?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'];
- unset($definition['shape']);
- $result = Shape::create($definition, $this);
- if ($isSimple) {
- $this->simple[$shape] = $result;
- }
- return $result;
- }
- }
|