PartitionEndpointProvider.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace Aws\Endpoint;
  3. class PartitionEndpointProvider
  4. {
  5. /** @var Partition[] */
  6. private $partitions;
  7. /** @var string */
  8. private $defaultPartition;
  9. public function __construct(array $partitions, $defaultPartition = 'aws')
  10. {
  11. $this->partitions = array_map(function (array $definition) {
  12. return new Partition($definition);
  13. }, array_values($partitions));
  14. $this->defaultPartition = $defaultPartition;
  15. }
  16. public function __invoke(array $args = [])
  17. {
  18. $partition = $this->getPartition(
  19. isset($args['region']) ? $args['region'] : '',
  20. isset($args['service']) ? $args['service'] : ''
  21. );
  22. return $partition($args);
  23. }
  24. /**
  25. * Returns the partition containing the provided region or the default
  26. * partition if no match is found.
  27. *
  28. * @param string $region
  29. * @param string $service
  30. *
  31. * @return Partition
  32. */
  33. public function getPartition($region, $service)
  34. {
  35. foreach ($this->partitions as $partition) {
  36. if ($partition->isRegionMatch($region, $service)) {
  37. return $partition;
  38. }
  39. }
  40. return $this->getPartitionByName($this->defaultPartition);
  41. }
  42. /**
  43. * Returns the partition with the provided name or null if no partition with
  44. * the provided name can be found.
  45. *
  46. * @param string $name
  47. *
  48. * @return Partition|null
  49. */
  50. public function getPartitionByName($name)
  51. {
  52. foreach ($this->partitions as $partition) {
  53. if ($name === $partition->getName()) {
  54. return $partition;
  55. }
  56. }
  57. }
  58. /**
  59. * Creates and returns the default SDK partition provider.
  60. *
  61. * @return PartitionEndpointProvider
  62. */
  63. public static function defaultProvider()
  64. {
  65. $data = \Aws\load_compiled_json(__DIR__ . '/../data/endpoints.json');
  66. return new self($data['partitions']);
  67. }
  68. }