| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 | 
							- <?php
 
- namespace Aws\EndpointV2\Rule;
 
- use Aws\EndpointV2\Ruleset\RulesetStandardLibrary;
 
- use Aws\EndpointV2\Ruleset\RulesetEndpoint;
 
- class EndpointRule extends AbstractRule
 
- {
 
-     /** @var array */
 
-     private $endpoint;
 
-     public function __construct(array $definition)
 
-     {
 
-         parent::__construct($definition);
 
-         $this->endpoint = $definition['endpoint'];
 
-     }
 
-     /**
 
-      * @return array
 
-      */
 
-     public function getEndpoint()
 
-     {
 
-         return $this->endpoint;
 
-     }
 
-     /**
 
-      * If all the rule's conditions are met, return the resolved
 
-      * endpoint object.
 
-      *
 
-      * @return RulesetEndpoint | null
 
-      */
 
-     public function evaluate(array $inputParameters, RulesetStandardLibrary $standardLibrary)
 
-     {
 
-         if ($this->evaluateConditions($inputParameters, $standardLibrary)) {
 
-             return $this->resolve($inputParameters, $standardLibrary);
 
-         }
 
-         return false;
 
-     }
 
-     /**
 
-      * Given input parameters, resolve an endpoint in its entirety.
 
-      *
 
-      * @return RulesetEndpoint
 
-      */
 
-     private function resolve(
 
-         array $inputParameters,
 
-         RulesetStandardLibrary $standardLibrary
 
-     )
 
-     {
 
-         $uri = $standardLibrary->resolveValue($this->endpoint['url'], $inputParameters);
 
-         $properties = isset($this->endpoint['properties'])
 
-                 ? $this->resolveProperties($this->endpoint['properties'], $inputParameters, $standardLibrary)
 
-                 : null;
 
-         $headers = $this->resolveHeaders($inputParameters, $standardLibrary);
 
-         return new RulesetEndpoint($uri, $properties, $headers);
 
-     }
 
-     /**
 
-      * Recurse through an endpoint's `properties` attribute, resolving template
 
-      * strings when found. Return the fully resolved attribute.
 
-      *
 
-      * @return array
 
-      */
 
-     private function resolveProperties(
 
-         $properties,
 
-         array $inputParameters,
 
-         RulesetStandardLibrary $standardLibrary
 
-     )
 
-     {
 
-         if (is_array($properties)) {
 
-            $propertiesArr = [];
 
-            foreach($properties as $key => $val) {
 
-                $propertiesArr[$key] = $this->resolveProperties($val, $inputParameters, $standardLibrary);
 
-            }
 
-            return $propertiesArr;
 
-         } elseif ($standardLibrary->isTemplate($properties)) {
 
-             return $standardLibrary->resolveTemplateString($properties, $inputParameters);
 
-         }
 
-         return $properties;
 
-     }
 
-     /**
 
-      * If present, iterate through an endpoint's headers attribute resolving
 
-      * values along the way. Return the fully resolved attribute.
 
-      *
 
-      * @return array
 
-      */
 
-     private function resolveHeaders(
 
-         array $inputParameters,
 
-         RulesetStandardLibrary $standardLibrary
 
-     )
 
-     {
 
-         $headers = isset($this->endpoint['headers']) ? $this->endpoint['headers'] : null;
 
-         if (is_null($headers)) {
 
-             return null;
 
-         }
 
-         $resolvedHeaders = [];
 
-         foreach($headers as $headerName => $headerValues) {
 
-             $resolvedValues = [];
 
-             foreach($headerValues as $value) {
 
-                 $resolvedValue = $standardLibrary->resolveValue($value, $inputParameters, $standardLibrary);
 
-                 $resolvedValues[] = $resolvedValue;
 
-             }
 
-             $resolvedHeaders[$headerName] = $resolvedValues;
 
-         }
 
-         return $resolvedHeaders;
 
-     }
 
- }
 
 
  |