summaryrefslogtreecommitdiff
path: root/vendor/aws/aws-sdk-php/src/EndpointV2/EndpointProviderV2.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/aws/aws-sdk-php/src/EndpointV2/EndpointProviderV2.php')
-rw-r--r--vendor/aws/aws-sdk-php/src/EndpointV2/EndpointProviderV2.php68
1 files changed, 68 insertions, 0 deletions
diff --git a/vendor/aws/aws-sdk-php/src/EndpointV2/EndpointProviderV2.php b/vendor/aws/aws-sdk-php/src/EndpointV2/EndpointProviderV2.php
new file mode 100644
index 0000000..bd57494
--- /dev/null
+++ b/vendor/aws/aws-sdk-php/src/EndpointV2/EndpointProviderV2.php
@@ -0,0 +1,68 @@
+<?php
+
+namespace Aws\EndpointV2;
+
+use Aws\EndpointV2\Ruleset\Ruleset;
+use Aws\Exception\UnresolvedEndpointException;
+use Aws\LruArrayCache;
+
+/**
+ * Given a service's Ruleset and client-provided input parameters, provides
+ * either an object reflecting the properties of a resolved endpoint,
+ * or throws an error.
+ */
+class EndpointProviderV2
+{
+ /** @var Ruleset */
+ private $ruleset;
+
+ /** @var LruArrayCache */
+ private $cache;
+
+ public function __construct(array $ruleset, array $partitions)
+ {
+ $this->ruleset = new Ruleset($ruleset, $partitions);
+ $this->cache = new LruArrayCache(100);
+ }
+
+ /**
+ * @return Ruleset
+ */
+ public function getRuleset()
+ {
+ return $this->ruleset;
+ }
+
+ /**
+ * Given a Ruleset and input parameters, determines the correct endpoint
+ * or an error to be thrown for a given request.
+ *
+ * @return RulesetEndpoint
+ * @throws UnresolvedEndpointException
+ */
+ public function resolveEndpoint(array $inputParameters)
+ {
+ $hashedParams = $this->hashInputParameters($inputParameters);
+ $match = $this->cache->get($hashedParams);
+
+ if (!is_null($match)) {
+ return $match;
+ }
+
+ $endpoint = $this->ruleset->evaluate($inputParameters);
+ if ($endpoint === false) {
+ throw new UnresolvedEndpointException(
+ 'Unable to resolve an endpoint using the provider arguments: '
+ . json_encode($inputParameters)
+ );
+ }
+ $this->cache->set($hashedParams, $endpoint);
+
+ return $endpoint;
+ }
+
+ private function hashInputParameters($inputParameters)
+ {
+ return md5(serialize($inputParameters));
+ }
+}