Lines n/a 0 / 0
Functions and Methods n/a 0 / 0
Classes and Traits n/a 0 / 0
Name Lines Functions and Methods CRAP Classes and Traits
1<?php
2
3declare(strict_types=1);
4
5namespace Stewart\Contracts;
6
7use Stewart\Contracts\Connection\ConnectionEvent;
8use Stewart\Contracts\Entity\Entity;
9use Stewart\Contracts\Entity\EntityId;
10use Stewart\Contracts\Event\HaEvent;
11use Stewart\Contracts\Exception\EventFireException;
12use Stewart\Contracts\Exception\HistoryException;
13use Stewart\Contracts\Exception\IdentifierException;
14use Stewart\Contracts\Exception\SelectorException;
15use Stewart\Contracts\Exception\ServiceCallException;
16use Stewart\Contracts\Exception\StateException;
17use Stewart\Contracts\Exception\TopicException;
18use Stewart\Contracts\Exception\TriggerException;
19use Stewart\Contracts\Exception\WaitException;
20use Stewart\Contracts\History\EntityStateHistory;
21use Stewart\Contracts\History\HistoryQuery;
22use Stewart\Contracts\Registry\EntityFilter;
23use Stewart\Contracts\Registry\Registry;
24use Stewart\Contracts\Selector\Collection\SelectorCollection;
25use Stewart\Contracts\Selector\Selector;
26use Stewart\Contracts\Service\ServiceResponse;
27use Stewart\Contracts\Service\ServiceTargetSource;
28use Stewart\Contracts\State\Collection\EntityStateCollection;
29use Stewart\Contracts\State\EntityState;
30use Stewart\Contracts\State\EventContext;
31use Stewart\Contracts\State\StateChange;
32use Stewart\Contracts\Time\Duration;
33use Stewart\Contracts\Topic\TopicEvent;
34use Stewart\Contracts\Trigger\Collection\HaTriggerCollection;
35use Stewart\Contracts\Trigger\HaTrigger;
36use Stewart\Contracts\Trigger\TriggerEvent;
37
38interface HaContext
39{
40    /** @throws IdentifierException */
41    public function getState(EntityId|string $entityId): ?EntityState;
42
43    /** @throws IdentifierException */
44    public function getEntity(EntityId|string $entityId): Entity;
45
46    /** @throws StateException|IdentifierException */
47    public function requireState(EntityId|string $entityId): EntityState;
48
49    /** @throws HistoryException|IdentifierException */
50    public function getHistory(EntityId|string $entityId, HistoryQuery $query): EntityStateHistory;
51
52    public function listStates(string|EntityId|Selector|SelectorCollection|EntityFilter|null $selector = null): EntityStateCollection;
53
54    public function watchStateChanges(string|EntityId|Selector|SelectorCollection|EntityFilter $selector): StateChangeStream;
55
56    // Returns at once when the entity is already in $state, and null once the timeout passes.
57    /** @throws WaitException|IdentifierException */
58    public function waitForState(EntityId|string $entityId, string $state, ?Duration $timeout = null): ?EntityState;
59
60    public function getRegistry(): Registry;
61
62    /**
63     * @return EventStream<HaEvent>
64     * @throws StateException|SelectorException
65     */
66    public function watchEvents(string|Selector|SelectorCollection $eventType): EventStream;
67
68    /**
69     * @param HaTrigger|HaTriggerCollection|array<array-key, mixed> $trigger
70     * @param array<array-key, mixed> $variables
71     * @return EventStream<TriggerEvent>
72     * @throws TriggerException
73     */
74    public function watchTrigger(HaTrigger|HaTriggerCollection|array $trigger, array $variables = []): EventStream;
75
76    /**
77     * @param array<string, mixed> $data
78     * @throws ServiceCallException
79     */
80    public function callService(string $domain, string $service, array $data = [], ?ServiceTargetSource $target = null): EventContext;
81
82    /**
83     * @param array<string, mixed> $data
84     * @throws ServiceCallException
85     */
86    public function callServiceForResponse(string $domain, string $service, array $data = [], ?ServiceTargetSource $target = null): ServiceResponse;
87
88    /**
89     * @param array<string, mixed> $data
90     * @throws EventFireException
91     */
92    public function fireEvent(string $eventType, array $data = []): EventContext;
93
94    public function wasCausedByStewart(StateChange|EntityState|HaEvent $subject): bool;
95
96    /**
97     * @param array<array-key, mixed>|scalar|null $payload
98     * @throws TopicException
99     */
100    public function publish(string $topic, bool|int|float|string|array|null $payload = null): void;
101
102    /** @return EventStream<TopicEvent> */
103    public function watchTopic(string|Selector|SelectorCollection $topic): EventStream;
104
105    /** @return EventStream<ConnectionEvent> */
106    public function watchConnection(): EventStream;
107
108    public function isConnected(): bool;
109}