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,
20        presence::{PresenceEvent, PresenceEventContent},
21        AnyGlobalAccountDataEvent, AnyRoomAccountDataEvent, AnyStrippedStateEvent,
22        AnySyncEphemeralRoomEvent, AnySyncMessageLikeEvent, AnySyncStateEvent,
23        AnySyncTimelineEvent, AnyToDeviceEvent, EphemeralRoomEventContent,
24        GlobalAccountDataEventContent, MessageLikeEventContent, PossiblyRedactedStateEventContent,
25        RedactContent, RedactedMessageLikeEventContent, RedactedStateEventContent,
26        RoomAccountDataEventContent, StaticEventContent, StaticStateEventContent,
27        ToDeviceEventContent,
28    },
29    serde::Raw,
30};
31
32use super::{HandlerKind, SyncEvent};
33
34impl<C> SyncEvent for events::GlobalAccountDataEvent<C>
35where
36    C: StaticEventContent + GlobalAccountDataEventContent,
37{
38    const KIND: HandlerKind = HandlerKind::GlobalAccountData;
39    const TYPE: Option<&'static str> = Some(C::TYPE);
40}
41
42impl<C> SyncEvent for events::RoomAccountDataEvent<C>
43where
44    C: StaticEventContent + RoomAccountDataEventContent,
45{
46    const KIND: HandlerKind = HandlerKind::RoomAccountData;
47    const TYPE: Option<&'static str> = Some(C::TYPE);
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}
57
58impl<C> SyncEvent for events::SyncMessageLikeEvent<C>
59where
60    C: StaticEventContent + MessageLikeEventContent + RedactContent,
61    C::Redacted: RedactedMessageLikeEventContent,
62{
63    const KIND: HandlerKind = HandlerKind::MessageLike;
64    const TYPE: Option<&'static str> = Some(C::TYPE);
65}
66
67impl<C> SyncEvent for events::OriginalSyncMessageLikeEvent<C>
68where
69    C: StaticEventContent + MessageLikeEventContent,
70{
71    const KIND: HandlerKind = HandlerKind::OriginalMessageLike;
72    const TYPE: Option<&'static str> = Some(C::TYPE);
73}
74
75impl<C> SyncEvent for events::RedactedSyncMessageLikeEvent<C>
76where
77    C: StaticEventContent + RedactedMessageLikeEventContent,
78{
79    const KIND: HandlerKind = HandlerKind::RedactedMessageLike;
80    const TYPE: Option<&'static str> = Some(C::TYPE);
81}
82
83impl SyncEvent for events::room::redaction::SyncRoomRedactionEvent {
84    const KIND: HandlerKind = HandlerKind::MessageLike;
85    const TYPE: Option<&'static str> =
86        Some(events::room::redaction::RoomRedactionEventContent::TYPE);
87}
88
89impl SyncEvent for events::room::redaction::OriginalSyncRoomRedactionEvent {
90    const KIND: HandlerKind = HandlerKind::OriginalMessageLike;
91    const TYPE: Option<&'static str> =
92        Some(events::room::redaction::RoomRedactionEventContent::TYPE);
93}
94
95impl SyncEvent for events::room::redaction::RedactedSyncRoomRedactionEvent {
96    const KIND: HandlerKind = HandlerKind::RedactedMessageLike;
97    const TYPE: Option<&'static str> =
98        Some(events::room::redaction::RoomRedactionEventContent::TYPE);
99}
100
101impl<C> SyncEvent for events::SyncStateEvent<C>
102where
103    C: StaticEventContent + StaticStateEventContent + RedactContent,
104    C::Redacted: RedactedStateEventContent,
105{
106    const KIND: HandlerKind = HandlerKind::State;
107    const TYPE: Option<&'static str> = Some(C::TYPE);
108}
109
110impl<C> SyncEvent for events::OriginalSyncStateEvent<C>
111where
112    C: StaticEventContent + StaticStateEventContent,
113{
114    const KIND: HandlerKind = HandlerKind::OriginalState;
115    const TYPE: Option<&'static str> = Some(C::TYPE);
116}
117
118impl<C> SyncEvent for events::RedactedSyncStateEvent<C>
119where
120    C: StaticEventContent + RedactedStateEventContent,
121{
122    const KIND: HandlerKind = HandlerKind::RedactedState;
123    const TYPE: Option<&'static str> = Some(C::TYPE);
124}
125
126impl<C> SyncEvent for events::StrippedStateEvent<C>
127where
128    C: StaticEventContent + PossiblyRedactedStateEventContent,
129{
130    const KIND: HandlerKind = HandlerKind::StrippedState;
131    const TYPE: Option<&'static str> = Some(C::TYPE);
132}
133
134impl<C> SyncEvent for events::ToDeviceEvent<C>
135where
136    C: StaticEventContent + ToDeviceEventContent,
137{
138    const KIND: HandlerKind = HandlerKind::ToDevice;
139    const TYPE: Option<&'static str> = Some(C::TYPE);
140}
141
142impl SyncEvent for PresenceEvent {
143    const KIND: HandlerKind = HandlerKind::Presence;
144    const TYPE: Option<&'static str> = Some(PresenceEventContent::TYPE);
145}
146
147impl SyncEvent for AnyGlobalAccountDataEvent {
148    const KIND: HandlerKind = HandlerKind::GlobalAccountData;
149    const TYPE: Option<&'static str> = None;
150}
151
152impl SyncEvent for AnyRoomAccountDataEvent {
153    const KIND: HandlerKind = HandlerKind::RoomAccountData;
154    const TYPE: Option<&'static str> = None;
155}
156
157impl SyncEvent for AnySyncEphemeralRoomEvent {
158    const KIND: HandlerKind = HandlerKind::EphemeralRoomData;
159    const TYPE: Option<&'static str> = None;
160}
161
162impl SyncEvent for AnySyncTimelineEvent {
163    const KIND: HandlerKind = HandlerKind::Timeline;
164    const TYPE: Option<&'static str> = None;
165}
166
167impl SyncEvent for AnySyncMessageLikeEvent {
168    const KIND: HandlerKind = HandlerKind::MessageLike;
169    const TYPE: Option<&'static str> = None;
170}
171
172impl SyncEvent for AnySyncStateEvent {
173    const KIND: HandlerKind = HandlerKind::State;
174    const TYPE: Option<&'static str> = None;
175}
176
177impl SyncEvent for AnyStrippedStateEvent {
178    const KIND: HandlerKind = HandlerKind::StrippedState;
179    const TYPE: Option<&'static str> = None;
180}
181
182impl SyncEvent for AnyToDeviceEvent {
183    const KIND: HandlerKind = HandlerKind::ToDevice;
184    const TYPE: Option<&'static str> = None;
185}
186
187impl<T: SyncEvent> SyncEvent for Raw<T> {
188    const KIND: HandlerKind = T::KIND;
189    const TYPE: Option<&'static str> = T::TYPE;
190}