12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- declare(strict_types=1);
- namespace Magento\InventoryDistanceBasedSourceSelectionApi\Model;
- use Magento\InventoryDistanceBasedSourceSelectionApi\Api\Data\LatLngInterface;
- use Magento\InventoryDistanceBasedSourceSelectionApi\Api\GetDistanceInterface;
- use Magento\InventoryDistanceBasedSourceSelectionApi\Api\GetDistanceProviderCodeInterface;
- use Magento\InventoryDistanceBasedSourceSelectionApi\Exception\NoSuchDistanceProviderException;
- /**
- * Get distance between two points
- *
- * @api
- */
- class GetDistance implements GetDistanceInterface
- {
- /**
- * @var GetDistanceInterface[]
- */
- private $providers;
- /**
- * @var GetDistanceProviderCodeInterface
- */
- private $getDistanceProviderCode;
- /**
- * GetLatLngFromSource constructor.
- *
- * @param GetDistanceProviderCodeInterface $getDistanceProviderCode
- * @param GetDistanceInterface[] $providers
- * @SuppressWarnings(PHPMD.LongVariable)
- */
- public function __construct(
- GetDistanceProviderCodeInterface $getDistanceProviderCode,
- array $providers
- ) {
- foreach ($providers as $providerCode => $provider) {
- if (!($provider instanceof GetDistanceInterface)) {
- throw new \InvalidArgumentException(
- 'LatLng provider ' . $providerCode . ' must implement ' . GetDistanceInterface::class
- );
- }
- }
- $this->providers = $providers;
- $this->getDistanceProviderCode = $getDistanceProviderCode;
- }
- /**
- * @inheritdoc
- * @throws NoSuchDistanceProviderException
- */
- public function execute(LatLngInterface $source, LatLngInterface $destination): float
- {
- $code = $this->getDistanceProviderCode->execute();
- if (!isset($this->providers[$code])) {
- throw new NoSuchDistanceProviderException(
- __('No such distance provider: %1', $code)
- );
- }
- return $this->providers[$code]->execute($source, $destination);
- }
- }
|