ruma_state_res/events/
traits.rs1use std::{
2 borrow::Borrow,
3 fmt::{Debug, Display},
4 hash::Hash,
5 sync::Arc,
6};
7
8use ruma_common::{EventId, MilliSecondsSinceUnixEpoch, RoomId, UserId};
9use ruma_events::TimelineEventType;
10use serde_json::value::RawValue as RawJsonValue;
11
12pub trait Event {
14 type Id: Clone + Debug + Display + Eq + Ord + Hash + Borrow<EventId>;
16
17 fn event_id(&self) -> &Self::Id;
19
20 fn room_id(&self) -> Option<&RoomId>;
22
23 fn sender(&self) -> &UserId;
25
26 fn origin_server_ts(&self) -> MilliSecondsSinceUnixEpoch;
28
29 fn event_type(&self) -> &TimelineEventType;
31
32 fn content(&self) -> &RawJsonValue;
34
35 fn state_key(&self) -> Option<&str>;
37
38 fn prev_events(&self) -> Box<dyn DoubleEndedIterator<Item = &Self::Id> + '_>;
41
42 fn auth_events(&self) -> Box<dyn DoubleEndedIterator<Item = &Self::Id> + '_>;
45
46 fn redacts(&self) -> Option<&Self::Id>;
48
49 fn rejected(&self) -> bool;
51}
52
53impl<T: Event> Event for &T {
54 type Id = T::Id;
55
56 fn event_id(&self) -> &Self::Id {
57 (*self).event_id()
58 }
59
60 fn room_id(&self) -> Option<&RoomId> {
61 (*self).room_id()
62 }
63
64 fn sender(&self) -> &UserId {
65 (*self).sender()
66 }
67
68 fn origin_server_ts(&self) -> MilliSecondsSinceUnixEpoch {
69 (*self).origin_server_ts()
70 }
71
72 fn event_type(&self) -> &TimelineEventType {
73 (*self).event_type()
74 }
75
76 fn content(&self) -> &RawJsonValue {
77 (*self).content()
78 }
79
80 fn state_key(&self) -> Option<&str> {
81 (*self).state_key()
82 }
83
84 fn prev_events(&self) -> Box<dyn DoubleEndedIterator<Item = &Self::Id> + '_> {
85 (*self).prev_events()
86 }
87
88 fn auth_events(&self) -> Box<dyn DoubleEndedIterator<Item = &Self::Id> + '_> {
89 (*self).auth_events()
90 }
91
92 fn redacts(&self) -> Option<&Self::Id> {
93 (*self).redacts()
94 }
95
96 fn rejected(&self) -> bool {
97 (*self).rejected()
98 }
99}
100
101impl<T: Event> Event for Arc<T> {
102 type Id = T::Id;
103
104 fn event_id(&self) -> &Self::Id {
105 (**self).event_id()
106 }
107
108 fn room_id(&self) -> Option<&RoomId> {
109 (**self).room_id()
110 }
111
112 fn sender(&self) -> &UserId {
113 (**self).sender()
114 }
115
116 fn origin_server_ts(&self) -> MilliSecondsSinceUnixEpoch {
117 (**self).origin_server_ts()
118 }
119
120 fn event_type(&self) -> &TimelineEventType {
121 (**self).event_type()
122 }
123
124 fn content(&self) -> &RawJsonValue {
125 (**self).content()
126 }
127
128 fn state_key(&self) -> Option<&str> {
129 (**self).state_key()
130 }
131
132 fn prev_events(&self) -> Box<dyn DoubleEndedIterator<Item = &Self::Id> + '_> {
133 (**self).prev_events()
134 }
135
136 fn auth_events(&self) -> Box<dyn DoubleEndedIterator<Item = &Self::Id> + '_> {
137 (**self).auth_events()
138 }
139
140 fn redacts(&self) -> Option<&Self::Id> {
141 (**self).redacts()
142 }
143
144 fn rejected(&self) -> bool {
145 (**self).rejected()
146 }
147}