Lines 100.00% 9 / 9
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% 8 / 8 100.00% 1 / 1 2
13final readonly class WorkerMessageDispatcher
14{
15    /** @var MessageHandlerIndex<WorkerMessageHandler<*>> */
16    private MessageHandlerIndex $handlers;
17
18    /**
19     * @param iterable<WorkerMessageHandler<*>> $handlers
20     *
21     * @throws ContainerException
22     */
23    public function __construct(
24        iterable $handlers,
25        private LoggerInterface $logger,
26    ) {
27        $this->handlers = MessageHandlerIndex::fromHandlers($handlers);
28    }
29
30    public function dispatch(WorkerHandle $handle, WorkerMessage $message): void
31    {
32        /** @var WorkerMessageHandler<WorkerMessage>|null $handler */
33        $handler = $this->handlers->findHandlerFor($message);
34
35        if ($handler === null) {
36            $this->logger->warning('Ignoring an unknown worker message', [
37                'worker' => $handle->id->value,
38                'message' => $message::class,
39            ]);
40
41            return;
42        }
43
44        $handler->handle($handle, $message);
45    }
46}