matrix_sdk/event_handler/
static_events.rs

1// Copyright 2021 Jonas Platte
2// Copyright 2022 Famedly GmbH
3// Copyright 2022 The Matrix.org Foundation C.I.C.
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8//
9//     http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing, software
12// distributed under the License is distributed on an "AS IS" BASIS,
13// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14// See the License for the specific language governing permissions and
15// limitations under the License.
16
17use ruma::{
18    events::{
19        self, presence::PresenceEvent, AnyGlobalAccountDataEvent, AnyRoomAccountDataEvent,
20        AnyStrippedStateEvent, AnySyncEphemeralRoomEvent, AnySyncMessageLikeEvent,
21        AnySyncStateEvent, AnySyncTimelineEvent, AnyToDeviceEvent, EphemeralRoomEventContent,
22        False, GlobalAccountDataEventContent, MessageLikeEventContent,
23        PossiblyRedactedStateEventContent, RedactContent, RedactedMessageLikeEventContent,
24        RedactedStateEventContent, RoomAccountDataEventContent, StaticEventContent,
25        StaticStateEventContent, ToDeviceEventContent,
26    },
27    serde::Raw,
28};
29
30use super::{HandlerKind, SyncEvent};
31
32impl<C> SyncEvent for events::GlobalAccountDataEvent<C>
33where
34    C: StaticEventContent + GlobalAccountDataEventContent,
35{
36    const KIND: HandlerKind = HandlerKind::GlobalAccountData;
37    const TYPE: Option<&'static str> = Some(C::TYPE);
38    type IsPrefix = <C as StaticEventContent>::IsPrefix;
39}
40
41impl<C> SyncEvent for events::RoomAccountDataEvent<C>
42where
43    C: StaticEventContent + RoomAccountDataEventContent,
44{
45    const KIND: HandlerKind = HandlerKind::RoomAccountData;
46    const TYPE: Option<&'static str> = Some(C::TYPE);
47    type IsPrefix = <C as StaticEventContent>::IsPrefix;
48}
49
50impl<C> SyncEvent for events::SyncEphemeralRoomEvent<C>
51where
52    C: StaticEventContent + EphemeralRoomEventContent,
53{
54    const KIND: HandlerKind = HandlerKind::EphemeralRoomData;
55    const TYPE: Option<&'static str> = Some(C::TYPE);
56    type IsPrefix = <C as StaticEventContent>::IsPrefix;
57}
58
59impl<C> SyncEvent for events::SyncMessageLikeEvent<C>
60where
61    C: StaticEventContent + MessageLikeEventContent + RedactContent,
62    C::Redacted: RedactedMessageLikeEventContent,
63{
64    const KIND: HandlerKind = HandlerKind::MessageLike;
65    const TYPE: Option<&'static str> = Some(C::TYPE);
66    type IsPrefix = <C as StaticEventContent>::IsPrefix;
67}
68
69impl<C> SyncEvent for events::OriginalSyncMessageLikeEvent<C>
70where
71    C: StaticEventContent + MessageLikeEventContent,
72{
73    const KIND: HandlerKind = HandlerKind::OriginalMessageLike;
74    const TYPE: Option<&'static str> = Some(C::TYPE);
75    type IsPrefix = <C as StaticEventContent>::IsPrefix;
76}
77
78impl<C> SyncEvent for events::RedactedSyncMessageLikeEvent<C>
79where
80    C: StaticEventContent + RedactedMessageLikeEventContent,
81{
82    const KIND: HandlerKind = HandlerKind::RedactedMessageLike;
83    const TYPE: Option<&'static str> = Some(C::TYPE);
84    type IsPrefix = <C as StaticEventContent>::IsPrefix;
85}
86
87impl SyncEvent for events::room::redaction::SyncRoomRedactionEvent {
88    const KIND: HandlerKind = HandlerKind::MessageLike;
89    const TYPE: Option<&'static str> =
90        Some(events::room::redaction::RoomRedactionEventContent::TYPE);
91    type IsPrefix =
92        <events::room::redaction::RoomRedactionEventContent as StaticEventContent>::IsPrefix;
93}
94
95impl SyncEvent for events::room::redaction::OriginalSyncRoomRedactionEvent {
96    const KIND: HandlerKind = HandlerKind::OriginalMessageLike;
97    const TYPE: Option<&'static str> =
98        Some(events::room::redaction::RoomRedactionEventContent::TYPE);
99    type IsPrefix =
100        <events::room::redaction::RoomRedactionEventContent as StaticEventContent>::IsPrefix;
101}
102
103impl SyncEvent for events::room::redaction::RedactedSyncRoomRedactionEvent {
104    const KIND: HandlerKind = HandlerKind::RedactedMessageLike;
105    const TYPE: Option<&'static str> =
106        Some(events::room::redaction::RoomRedactionEventContent::TYPE);
107    type IsPrefix =
108        <events::room::redaction::RoomRedactionEventContent as StaticEventContent>::IsPrefix;
109}
110
111impl<C> SyncEvent for events::SyncStateEvent<C>
112where
113    C: StaticEventContent + StaticStateEventContent + RedactContent,
114    C::Redacted: RedactedStateEventContent,
115{
116    const KIND: HandlerKind = HandlerKind::State;
117    const TYPE: Option<&'static str> = Some(C::TYPE);
118    type IsPrefix = <C as StaticEventContent>::IsPrefix;
119}
120
121impl<C> SyncEvent for events::OriginalSyncStateEvent<C>
122where
123    C: StaticEventContent + StaticStateEventContent,
124{
125    const KIND: HandlerKind = HandlerKind::OriginalState;
126    const TYPE: Option<&'static str> = Some(C::TYPE);
127    type IsPrefix = <C as StaticEventContent>::IsPrefix;
128}
129
130impl<C> SyncEvent for events::RedactedSyncStateEvent<C>
131where
132    C: StaticEventContent + RedactedStateEventContent,
133{
134    const KIND: HandlerKind = HandlerKind::RedactedState;
135    const TYPE: Option<&'static str> = Some(C::TYPE);
136    type IsPrefix = <C as StaticEventContent>::IsPrefix;
137}
138
139impl<C> SyncEvent for events::StrippedStateEvent<C>
140where
141    C: StaticEventContent + PossiblyRedactedStateEventContent,
142{
143    const KIND: HandlerKind = HandlerKind::StrippedState;
144    const TYPE: Option<&'static str> = Some(C::TYPE);
145    type IsPrefix = <C as StaticEventContent>::IsPrefix;
146}
147
148impl<C> SyncEvent for events::ToDeviceEvent<C>
149where
150    C: StaticEventContent + ToDeviceEventContent,
151{
152    const KIND: HandlerKind = HandlerKind::ToDevice;
153    const TYPE: Option<&'static str> = Some(C::TYPE);
154    type IsPrefix = <C as StaticEventContent>::IsPrefix;
155}
156
157impl SyncEvent for PresenceEvent {
158    const KIND: HandlerKind = HandlerKind::Presence;
159    const TYPE: Option<&'static str> = None;
160    type IsPrefix = False;
161}
162
163impl SyncEvent for AnyGlobalAccountDataEvent {
164    const KIND: HandlerKind = HandlerKind::GlobalAccountData;
165    const TYPE: Option<&'static str> = None;
166    type IsPrefix = False;
167}
168
169impl SyncEvent for AnyRoomAccountDataEvent {
170    const KIND: HandlerKind = HandlerKind::RoomAccountData;
171    const TYPE: Option<&'static str> = None;
172    type IsPrefix = False;
173}
174
175impl SyncEvent for AnySyncEphemeralRoomEvent {
176    const KIND: HandlerKind = HandlerKind::EphemeralRoomData;
177    const TYPE: Option<&'static str> = None;
178    type IsPrefix = False;
179}
180
181impl SyncEvent for AnySyncTimelineEvent {
182    const KIND: HandlerKind = HandlerKind::Timeline;
183    const TYPE: Option<&'static str> = None;
184    type IsPrefix = False;
185}
186
187impl SyncEvent for AnySyncMessageLikeEvent {
188    const KIND: HandlerKind = HandlerKind::MessageLike;
189    const TYPE: Option<&'static str> = None;
190    type IsPrefix = False;
191}
192
193impl SyncEvent for AnySyncStateEvent {
194    const KIND: HandlerKind = HandlerKind::State;
195    const TYPE: Option<&'static str> = None;
196    type IsPrefix = False;
197}
198
199impl SyncEvent for AnyStrippedStateEvent {
200    const KIND: HandlerKind = HandlerKind::StrippedState;
201    const TYPE: Option<&'static str> = None;
202    type IsPrefix = False;
203}
204
205impl SyncEvent for AnyToDeviceEvent {
206    const KIND: HandlerKind = HandlerKind::ToDevice;
207    const TYPE: Option<&'static str> = None;
208    type IsPrefix = False;
209}
210
211impl<T: SyncEvent> SyncEvent for Raw<T> {
212    const KIND: HandlerKind = T::KIND;
213    const TYPE: Option<&'static str> = T::TYPE;
214    type IsPrefix = <T as SyncEvent>::IsPrefix;
215}