<?php 
namespace Aws\Api; 
 
/** 
 * Represents a structure shape and resolve member shape references. 
 */ 
class StructureShape extends Shape 
{ 
    /** 
     * @var Shape[] 
     */ 
    private $members; 
 
    public function __construct(array $definition, ShapeMap $shapeMap) 
    { 
        $definition['type'] = 'structure'; 
 
        if (!isset($definition['members'])) { 
            $definition['members'] = []; 
        } 
 
        parent::__construct($definition, $shapeMap); 
    } 
 
    /** 
     * Gets a list of all members 
     * 
     * @return Shape[] 
     */ 
    public function getMembers() 
    { 
        if (empty($this->members)) { 
            $this->generateMembersHash(); 
        } 
 
        return $this->members; 
    } 
 
    /** 
     * Check if a specific member exists by name. 
     * 
     * @param string $name Name of the member to check 
     * 
     * @return bool 
     */ 
    public function hasMember($name) 
    { 
        return isset($this->definition['members'][$name]); 
    } 
 
    /** 
     * Retrieve a member by name. 
     * 
     * @param string $name Name of the member to retrieve 
     * 
     * @return Shape 
     * @throws \InvalidArgumentException if the member is not found. 
     */ 
    public function getMember($name) 
    { 
        $members = $this->getMembers(); 
 
        if (!isset($members[$name])) { 
            throw new \InvalidArgumentException('Unknown member ' . $name); 
        } 
 
        return $members[$name]; 
    } 
 
 
    private function generateMembersHash() 
    { 
        $this->members = []; 
 
        foreach ($this->definition['members'] as $name => $definition) { 
            $this->members[$name] = $this->shapeFor($definition); 
        } 
    } 
} 
 
 |