1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
use ruma_events_macros::ruma_event;
use ruma_identifiers::EventId;
ruma_event! {
PinnedEventsEvent {
kind: StateEvent,
event_type: "m.room.pinned_events",
content: {
pub pinned: Vec<EventId>,
},
}
}
#[cfg(test)]
mod tests {
use std::convert::TryFrom;
use js_int::UInt;
use ruma_identifiers::{EventId, RoomId, UserId};
use serde_json::{to_string, Map};
use crate::{
room::pinned_events::{PinnedEventsEvent, PinnedEventsEventContent},
Event, EventResult, RoomEvent, StateEvent,
};
#[test]
fn serialization_deserialization() {
let mut content: PinnedEventsEventContent = PinnedEventsEventContent { pinned: Vec::new() };
content.pinned.push(EventId::new("example.com").unwrap());
content.pinned.push(EventId::new("example.com").unwrap());
let event = PinnedEventsEvent {
content: content.clone(),
event_id: EventId::new("example.com").unwrap(),
origin_server_ts: UInt::try_from(1_432_804_485_886u64).unwrap(),
prev_content: None,
room_id: Some(RoomId::new("example.com").unwrap()),
sender: UserId::new("example.com").unwrap(),
state_key: "".to_string(),
unsigned: Map::new(),
};
let serialized_event = to_string(&event).unwrap();
let parsed_event: PinnedEventsEvent =
serde_json::from_str::<EventResult<_>>(&serialized_event)
.unwrap()
.into_result()
.unwrap();
assert_eq!(parsed_event.event_id(), event.event_id());
assert_eq!(parsed_event.room_id(), event.room_id());
assert_eq!(parsed_event.sender(), event.sender());
assert_eq!(parsed_event.unsigned(), event.unsigned());
assert_eq!(parsed_event.state_key(), event.state_key());
assert_eq!(parsed_event.origin_server_ts(), event.origin_server_ts());
assert_eq!(parsed_event.content().pinned, event.content.pinned);
assert_eq!(parsed_event.content().pinned[0], content.pinned[0]);
assert_eq!(parsed_event.content().pinned[1], content.pinned[1]);
}
}