Lines 100.00% 9 / 9
Functions and Methods 100.00% 3 / 3
Classes and Traits 100.00% 1 / 1
Name Lines Functions and Methods CRAP Classes and Traits
SubscriptionAckHandler 100.00% 9 / 9 100.00% 3 / 3 4 100.00% 1 / 1
 __construct 100.00% 1 / 1 100.00% 1 / 1 1
 handledMessageClass 100.00% 1 / 1 100.00% 1 / 1 1
 handle 100.00% 7 / 7 100.00% 1 / 1 2
1<?php
2
3declare(strict_types=1);
4
5namespace Stewart\Runtime\Worker\Message;
6
7use Psr\Log\LoggerInterface;
8use Stewart\Runtime\Dispatch\LocalDispatcher;
9use Stewart\Runtime\Ipc\Message\BrokerMessage;
10use Stewart\Runtime\Ipc\Message\SubscriptionAck;
11
12/** @implements BrokerMessageHandler<SubscriptionAck> */
13final readonly class SubscriptionAckHandler implements BrokerMessageHandler
14{
15    public function __construct(
16        private LoggerInterface $logger,
17        private LocalDispatcher $dispatcher,
18    ) {}
19
20    public function handledMessageClass(): string
21    {
22        return SubscriptionAck::class;
23    }
24
25    /** @param SubscriptionAck $message */
26    public function handle(BrokerMessage $message): void
27    {
28        if ($message->accepted) {
29            return;
30        }
31
32        $this->logger->error('Broker rejected a subscription', [
33            'subscription' => $message->subscriptionId->value,
34            'reason' => $message->reason ?? 'unknown',
35        ]);
36
37        $this->dispatcher->cancel($message->subscriptionId);
38    }
39}