StructureShape.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. namespace Aws\Api;
  3. /**
  4. * Represents a structure shape and resolve member shape references.
  5. */
  6. class StructureShape extends Shape
  7. {
  8. /**
  9. * @var Shape[]
  10. */
  11. private $members;
  12. public function __construct(array $definition, ShapeMap $shapeMap)
  13. {
  14. $definition['type'] = 'structure';
  15. if (!isset($definition['members'])) {
  16. $definition['members'] = [];
  17. }
  18. parent::__construct($definition, $shapeMap);
  19. }
  20. /**
  21. * Gets a list of all members
  22. *
  23. * @return Shape[]
  24. */
  25. public function getMembers()
  26. {
  27. if (empty($this->members)) {
  28. $this->generateMembersHash();
  29. }
  30. return $this->members;
  31. }
  32. /**
  33. * Check if a specific member exists by name.
  34. *
  35. * @param string $name Name of the member to check
  36. *
  37. * @return bool
  38. */
  39. public function hasMember($name)
  40. {
  41. return isset($this->definition['members'][$name]);
  42. }
  43. /**
  44. * Retrieve a member by name.
  45. *
  46. * @param string $name Name of the member to retrieve
  47. *
  48. * @return Shape
  49. * @throws \InvalidArgumentException if the member is not found.
  50. */
  51. public function getMember($name)
  52. {
  53. $members = $this->getMembers();
  54. if (!isset($members[$name])) {
  55. throw new \InvalidArgumentException('Unknown member ' . $name);
  56. }
  57. return $members[$name];
  58. }
  59. private function generateMembersHash()
  60. {
  61. $this->members = [];
  62. foreach ($this->definition['members'] as $name => $definition) {
  63. $this->members[$name] = $this->shapeFor($definition);
  64. }
  65. }
  66. }