'ec2', 'region' => 'us-west-2']); * // Returns an endpoint array or throws. * $endpoint = EndpointProvider::resolve($provider, [ * 'service' => 'ec2', * 'region' => 'us-west-2' * ]); * * You can compose multiple providers into a single provider using * {@see Aws\or_chain}. This function accepts providers as arguments and * returns a new function that will invoke each provider until a non-null value * is returned. * * $a = function (array $args) { * if ($args['region'] === 'my-test-region') { * return ['endpoint' => 'http://localhost:123/api']; * } * }; * $b = EndpointProvider::defaultProvider(); * $c = \Aws\or_chain($a, $b); * $config = ['service' => 'ec2', 'region' => 'my-test-region']; * $res = $c($config); // $a handles this. * $config['region'] = 'us-west-2'; * $res = $c($config); // $b handles this. */ class EndpointProvider { /** * Resolves and endpoint provider and ensures a non-null return value. * * @param callable $provider Provider function to invoke. * @param array $args Endpoint arguments to pass to the provider. * * @return array * @throws UnresolvedEndpointException */ public static function resolve(callable $provider, array $args = []) { $result = $provider($args); if (is_array($result)) { return $result; } throw new UnresolvedEndpointException( 'Unable to resolve an endpoint using the provider arguments: ' . json_encode($args) . '. Note: you can provide an "endpoint" ' . 'option to a client constructor to bypass invoking an endpoint ' . 'provider.'); } /** * Creates and returns the default SDK endpoint provider. * * @deprecated Use an instance of \Aws\Endpoint\Partition instead. * * @return callable */ public static function defaultProvider() { return PartitionEndpointProvider::defaultProvider(); } /** * Creates and returns an endpoint provider that uses patterns from an * array. * * @param array $patterns Endpoint patterns * * @return callable */ public static function patterns(array $patterns) { return new PatternEndpointProvider($patterns); } }