* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Messenger\Transport; use Symfony\Component\Messenger\Exception\InvalidArgumentException; use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface; /** * @author Samuel Roze */ class TransportFactory implements TransportFactoryInterface { private $factories; /** * @param iterable|TransportFactoryInterface[] $factories */ public function __construct(iterable $factories) { $this->factories = $factories; } public function createTransport(string $dsn, array $options, SerializerInterface $serializer): TransportInterface { foreach ($this->factories as $factory) { if ($factory->supports($dsn, $options)) { return $factory->createTransport($dsn, $options, $serializer); } } throw new InvalidArgumentException(sprintf('No transport supports the given Messenger DSN "%s".', $dsn)); } public function supports(string $dsn, array $options): bool { foreach ($this->factories as $factory) { if ($factory->supports($dsn, $options)) { return true; } } return false; } }