ruma_events/room/
pinned_events.rs1use ruma_common::OwnedEventId;
6use ruma_macros::EventContent;
7use serde::{Deserialize, Serialize};
8
9use crate::EmptyStateKey;
10
11#[derive(Clone, Debug, Deserialize, Serialize, EventContent)]
15#[cfg_attr(not(ruma_unstable_exhaustive_types), non_exhaustive)]
16#[ruma_event(type = "m.room.pinned_events", kind = State, state_key_type = EmptyStateKey)]
17pub struct RoomPinnedEventsEventContent {
18 pub pinned: Vec<OwnedEventId>,
20}
21
22impl RoomPinnedEventsEventContent {
23 pub fn new(pinned: Vec<OwnedEventId>) -> Self {
25 Self { pinned }
26 }
27}
28
29#[cfg(test)]
30mod tests {
31 use ruma_common::owned_event_id;
32
33 use super::RoomPinnedEventsEventContent;
34
35 #[test]
36 fn serialization_deserialization() {
37 let mut content: RoomPinnedEventsEventContent =
38 RoomPinnedEventsEventContent { pinned: Vec::new() };
39
40 content.pinned.push(owned_event_id!("$a:example.com"));
41 content.pinned.push(owned_event_id!("$b:example.com"));
42
43 let serialized = serde_json::to_string(&content).unwrap();
44 let parsed_content: RoomPinnedEventsEventContent =
45 serde_json::from_str(&serialized).unwrap();
46
47 assert_eq!(parsed_content.pinned, content.pinned);
48 }
49}