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; } }