Lines 100.00% 6 / 6
Methods 100.00% 2 / 2
Classes 100.00% 1 / 1
Name Lines Methods CRAP
 __construct 100.00% 1 / 1 100.00% 1 / 1 1
 dispatch 100.00% 5 / 5 100.00% 1 / 1 2
12final readonly class BrokerMessageDispatcher
13{
14    /** @var MessageHandlerIndex<BrokerMessageHandler<*>> */
15    private MessageHandlerIndex $handlers;
16
17    /**
18     * @param iterable<BrokerMessageHandler<*>> $handlers
19     *
20     * @throws ContainerException
21     */
22    public function __construct(
23        iterable $handlers,
24        private LoggerInterface $logger,
25    ) {
26        $this->handlers = MessageHandlerIndex::fromHandlers($handlers);
27    }
28
29    public function dispatch(BrokerMessage $message): void
30    {
31        /** @var BrokerMessageHandler<BrokerMessage>|null $handler */
32        $handler = $this->handlers->findHandlerFor($message);
33
34        if ($handler === null) {
35            $this->logger->warning('Ignoring an unknown broker message', ['message' => $message::class]);
36
37            return;
38        }
39
40        $handler->handle($message);
41    }
42}