- <?php
- declare(strict_types=1);
- namespace Slivki\Messenger\Query;
- use Symfony\Component\Messenger\MessageBusInterface;
- use Symfony\Component\Messenger\Stamp\HandledStamp;
- final class MessengerQueryBus implements QueryBusInterface
- {
-     private MessageBusInterface $messageBus;
-     public function __construct(MessageBusInterface $messageBus)
-     {
-         $this->messageBus = $messageBus;
-     }
-     /**
-      * @return mixed
-      */
-     public function handle(QueryInterface $query)
-     {
-         $envelope = $this->messageBus->dispatch($query);
-         /** @var HandledStamp[] $handledStamps */
-         $handledStamps = $envelope->all(HandledStamp::class);
-         $countOfHandledStamps = \count($handledStamps);
-         if ($countOfHandledStamps === 0) {
-             throw InvalidQueryHandlerCountException::zero($envelope);
-         }
-         if ($countOfHandledStamps > 1) {
-             $handlerNames = \array_map(
-                 static fn (HandledStamp $stamp): string => \sprintf('"%s"', $stamp->getHandlerName()),
-                 $handledStamps,
-             );
-             throw InvalidQueryHandlerCountException::moreThanOne($envelope, $countOfHandledStamps, $handlerNames);
-         }
-         return $handledStamps[0]->getResult();
-     }
- }
-