summaryrefslogtreecommitdiff
path: root/vendor/aws/aws-sdk-php/src/Api/ShapeMap.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/aws/aws-sdk-php/src/Api/ShapeMap.php')
-rw-r--r--vendor/aws/aws-sdk-php/src/Api/ShapeMap.php68
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;
+ }
+}