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