| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 | <?phpnamespace Aws\Endpoint;/** * Provides endpoints based on an endpoint pattern configuration array. */class PatternEndpointProvider{    /** @var array */    private $patterns;    /**     * @param array $patterns Hash of endpoint patterns mapping to endpoint     *                        configurations.     */    public function __construct(array $patterns)    {        $this->patterns = $patterns;    }    public function __invoke(array $args = [])    {        $service = isset($args['service']) ? $args['service'] : '';        $region = isset($args['region']) ? $args['region'] : '';        $keys = ["{$region}/{$service}", "{$region}/*", "*/{$service}", "*/*"];        foreach ($keys as $key) {            if (isset($this->patterns[$key])) {                return $this->expand(                    $this->patterns[$key],                    isset($args['scheme']) ? $args['scheme'] : 'https',                    $service,                    $region                );            }        }        return null;    }    private function expand(array $config, $scheme, $service, $region)    {        $config['endpoint'] = $scheme . '://'            . strtr($config['endpoint'], [                '{service}' => $service,                '{region}'  => $region            ]);        return $config;    }}
 |