src/Messenger/Query/MessengerQueryBus.php line 24

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Slivki\Messenger\Query;
  4. use Symfony\Component\Messenger\MessageBusInterface;
  5. use Symfony\Component\Messenger\Stamp\HandledStamp;
  6. final class MessengerQueryBus implements QueryBusInterface
  7. {
  8.     private MessageBusInterface $messageBus;
  9.     public function __construct(MessageBusInterface $messageBus)
  10.     {
  11.         $this->messageBus $messageBus;
  12.     }
  13.     /**
  14.      * @return mixed
  15.      */
  16.     public function handle(QueryInterface $query)
  17.     {
  18.         $envelope $this->messageBus->dispatch($query);
  19.         /** @var HandledStamp[] $handledStamps */
  20.         $handledStamps $envelope->all(HandledStamp::class);
  21.         $countOfHandledStamps = \count($handledStamps);
  22.         if ($countOfHandledStamps === 0) {
  23.             throw InvalidQueryHandlerCountException::zero($envelope);
  24.         }
  25.         if ($countOfHandledStamps 1) {
  26.             $handlerNames = \array_map(
  27.                 static fn (HandledStamp $stamp): string => \sprintf('"%s"'$stamp->getHandlerName()),
  28.                 $handledStamps,
  29.             );
  30.             throw InvalidQueryHandlerCountException::moreThanOne($envelope$countOfHandledStamps$handlerNames);
  31.         }
  32.         return $handledStamps[0]->getResult();
  33.     }
  34. }