Lines 72.72% 8 / 11
Methods 66.66% 2 / 3
Classes 0.00% 0 / 1
Name Lines Methods CRAP
 acceptsSelector 100.00% 5 / 5 100.00% 1 / 1 4
 isBrokerRouted 100.00% 3 / 3 100.00% 1 / 1 3
 needsTriggerSpec 0.00% 0 / 3 0.00% 0 / 1 12
10enum SubscriptionKind: string
11{
12    case StateChange = 'state_change';
13    case Event = 'event';
14    case Topic = 'topic';
15    case Connection = 'connection';
16    case Mqtt = 'mqtt';
17    case Trigger = 'trigger';
18    case ExposedCommand = 'exposed_command';
19
20    public function acceptsSelector(Selector $selector): bool
21    {
22        $isMqttFilter = $selector->getKind() === SelectorKind::MqttFilter;
23
24        return match ($this) {
25            self::Mqtt => $isMqttFilter,
26            self::Trigger, self::ExposedCommand => $selector->getKind() === SelectorKind::Exact,
27            self::StateChange, self::Event, self::Topic, self::Connection => !$isMqttFilter,
28        };
29    }
30
31    public function isBrokerRouted(): bool
32    {
33        return match ($this) {
34            self::Event, self::Topic, self::Mqtt, self::Trigger => true,
35            self::StateChange, self::Connection, self::ExposedCommand => false,
36        };
37    }
38
39    public function needsTriggerSpec(): bool
40    {
41        return match ($this) {
42            self::Trigger => true,
43            self::StateChange, self::Event, self::Topic, self::Connection, self::Mqtt, self::ExposedCommand => false,
44        };
45    }
46}