arminius_lib_events/
fields.rs1use std::borrow::Cow;
9
10use ruma::{MilliSecondsSinceUnixEpoch, events::TimelineEventType};
11
12use crate::{
13 Contextualized, Draft, EventHash, EventRefs, KnownRoomVersionId, RoomEvent, Signed,
14 VerificationMetadata, Verified,
15};
16
17pub trait DraftFields {
19 fn event_type(&self) -> &TimelineEventType;
21 fn sender(&self) -> &ruma::UserId;
23 fn state_key(&self) -> Option<&str>;
25 fn content(&self) -> Cow<'_, serde_json::value::RawValue>;
27 fn redacts(&self) -> Option<&ruma::EventId>;
29}
30
31pub trait ContextualizedFields: DraftFields {
33 fn origin_server_ts(&self) -> MilliSecondsSinceUnixEpoch;
35 fn auth_events(&self) -> &EventRefs;
37 fn prev_events(&self) -> &EventRefs;
39 fn depth(&self) -> u64;
41 fn room_version(&self) -> KnownRoomVersionId;
43 fn event_id(&self) -> &ruma::EventId;
45 fn room_id(&self) -> &ruma::RoomId;
47 fn hashes(&self) -> &EventHash;
49}
50
51pub trait SignedFields: ContextualizedFields {
53 fn signatures(&self) -> &ruma::ServerSignatures;
55}
56
57pub trait VerifiedFields: SignedFields {
59 fn metadata(&self) -> &VerificationMetadata;
61
62 fn soft_failed(&self) -> bool {
66 self.metadata().soft_failed
67 }
68}
69
70impl DraftFields for RoomEvent<Draft> {
71 fn event_type(&self) -> &TimelineEventType {
72 &self.state.timeline_event_type
73 }
74
75 fn sender(&self) -> &ruma::UserId {
76 &self.state.sender
77 }
78
79 fn state_key(&self) -> Option<&str> {
80 self.state.state_key.as_deref()
81 }
82
83 fn content(&self) -> Cow<'_, serde_json::value::RawValue> {
84 Cow::Borrowed(&self.state.content)
85 }
86
87 fn redacts(&self) -> Option<&ruma::EventId> {
88 self.state.redacts.as_deref()
89 }
90}
91
92impl DraftFields for RoomEvent<Contextualized> {
93 fn event_type(&self) -> &TimelineEventType {
94 &self.state.draft.timeline_event_type
95 }
96
97 fn sender(&self) -> &ruma::UserId {
98 &self.state.draft.sender
99 }
100
101 fn state_key(&self) -> Option<&str> {
102 self.state.draft.state_key.as_deref()
103 }
104
105 fn content(&self) -> Cow<'_, serde_json::value::RawValue> {
106 Cow::Borrowed(&self.state.draft.content)
107 }
108
109 fn redacts(&self) -> Option<&ruma::EventId> {
110 self.state.draft.redacts.as_deref()
111 }
112}
113
114impl DraftFields for RoomEvent<Signed> {
115 fn event_type(&self) -> &TimelineEventType {
116 &self.state.contextualized.draft.timeline_event_type
117 }
118
119 fn sender(&self) -> &ruma::UserId {
120 &self.state.contextualized.draft.sender
121 }
122
123 fn state_key(&self) -> Option<&str> {
124 self.state.contextualized.draft.state_key.as_deref()
125 }
126
127 fn content(&self) -> Cow<'_, serde_json::value::RawValue> {
128 Cow::Borrowed(&self.state.contextualized.draft.content)
129 }
130
131 fn redacts(&self) -> Option<&ruma::EventId> {
132 self.state.contextualized.draft.redacts.as_deref()
133 }
134}
135
136impl DraftFields for RoomEvent<Verified> {
137 fn event_type(&self) -> &TimelineEventType {
138 &self.state.signed.contextualized.draft.timeline_event_type
139 }
140
141 fn sender(&self) -> &ruma::UserId {
142 &self.state.signed.contextualized.draft.sender
143 }
144
145 fn state_key(&self) -> Option<&str> {
146 self.state.signed.contextualized.draft.state_key.as_deref()
147 }
148
149 fn content(&self) -> Cow<'_, serde_json::value::RawValue> {
150 Cow::Borrowed(&self.state.signed.contextualized.draft.content)
151 }
152
153 fn redacts(&self) -> Option<&ruma::EventId> {
154 self.state.signed.contextualized.draft.redacts.as_deref()
155 }
156}
157
158impl ContextualizedFields for RoomEvent<Contextualized> {
159 fn auth_events(&self) -> &EventRefs {
160 &self.state.auth_events
161 }
162
163 fn prev_events(&self) -> &EventRefs {
164 &self.state.prev_events
165 }
166
167 fn origin_server_ts(&self) -> MilliSecondsSinceUnixEpoch {
168 self.state.origin_server_ts
169 }
170
171 fn room_version(&self) -> KnownRoomVersionId {
172 self.state.room_version
173 }
174
175 fn depth(&self) -> u64 {
176 self.state.depth
177 }
178
179 fn event_id(&self) -> &ruma::EventId {
180 &self.state.event_id
181 }
182
183 fn room_id(&self) -> &ruma::RoomId {
184 &self.state.room_id
185 }
186
187 fn hashes(&self) -> &EventHash {
188 &self.state.hashes
189 }
190}
191
192impl ContextualizedFields for RoomEvent<Signed> {
193 fn auth_events(&self) -> &EventRefs {
194 &self.state.contextualized.auth_events
195 }
196
197 fn prev_events(&self) -> &EventRefs {
198 &self.state.contextualized.prev_events
199 }
200
201 fn origin_server_ts(&self) -> MilliSecondsSinceUnixEpoch {
202 self.state.contextualized.origin_server_ts
203 }
204
205 fn room_version(&self) -> KnownRoomVersionId {
206 self.state.contextualized.room_version
207 }
208
209 fn depth(&self) -> u64 {
210 self.state.contextualized.depth
211 }
212
213 fn event_id(&self) -> &ruma::EventId {
214 &self.state.contextualized.event_id
215 }
216 fn room_id(&self) -> &ruma::RoomId {
217 &self.state.contextualized.room_id
218 }
219 fn hashes(&self) -> &EventHash {
220 &self.state.contextualized.hashes
221 }
222}
223
224impl ContextualizedFields for RoomEvent<Verified> {
225 fn auth_events(&self) -> &EventRefs {
226 &self.state.signed.contextualized.auth_events
227 }
228
229 fn prev_events(&self) -> &EventRefs {
230 &self.state.signed.contextualized.prev_events
231 }
232
233 fn origin_server_ts(&self) -> MilliSecondsSinceUnixEpoch {
234 self.state.signed.contextualized.origin_server_ts
235 }
236
237 fn room_version(&self) -> KnownRoomVersionId {
238 self.state.signed.contextualized.room_version
239 }
240
241 fn depth(&self) -> u64 {
242 self.state.signed.contextualized.depth
243 }
244
245 fn event_id(&self) -> &ruma::EventId {
246 &self.state.signed.contextualized.event_id
247 }
248
249 fn room_id(&self) -> &ruma::RoomId {
250 &self.state.signed.contextualized.room_id
251 }
252 fn hashes(&self) -> &EventHash {
253 &self.state.signed.contextualized.hashes
254 }
255}
256
257impl SignedFields for RoomEvent<Signed> {
258 fn signatures(&self) -> &ruma::ServerSignatures {
259 &self.state.signatures
260 }
261}
262
263impl SignedFields for RoomEvent<Verified> {
264 fn signatures(&self) -> &ruma::ServerSignatures {
265 &self.state.signed.signatures
266 }
267}
268
269impl VerifiedFields for RoomEvent<Verified> {
270 fn metadata(&self) -> &VerificationMetadata {
271 &self.state.metadata
272 }
273}