matrix_sdk_base/room/
create.rs1use ruma::{
16 assign,
17 events::{
18 macros::EventContent,
19 room::create::{PreviousRoom, RoomCreateEventContent},
20 EmptyStateKey, RedactContent, RedactedStateEventContent,
21 },
22 room::RoomType,
23 OwnedUserId, RoomVersionId,
24};
25use serde::{Deserialize, Serialize};
26
27#[derive(Clone, Debug, Deserialize, Serialize, EventContent)]
37#[ruma_event(type = "m.room.create", kind = State, state_key_type = EmptyStateKey, custom_redacted)]
38pub struct RoomCreateWithCreatorEventContent {
39 pub creator: OwnedUserId,
46
47 #[serde(
50 rename = "m.federate",
51 default = "ruma::serde::default_true",
52 skip_serializing_if = "ruma::serde::is_true"
53 )]
54 pub federate: bool,
55
56 #[serde(default = "default_create_room_version_id")]
60 pub room_version: RoomVersionId,
61
62 #[serde(skip_serializing_if = "Option::is_none")]
65 pub predecessor: Option<PreviousRoom>,
66
67 #[serde(skip_serializing_if = "Option::is_none", rename = "type")]
71 pub room_type: Option<RoomType>,
72}
73
74impl RoomCreateWithCreatorEventContent {
75 pub fn from_event_content(content: RoomCreateEventContent, sender: OwnedUserId) -> Self {
78 let RoomCreateEventContent { federate, room_version, predecessor, room_type, .. } = content;
79 Self { creator: sender, federate, room_version, predecessor, room_type }
80 }
81
82 fn into_event_content(self) -> (RoomCreateEventContent, OwnedUserId) {
83 let Self { creator, federate, room_version, predecessor, room_type } = self;
84
85 #[allow(deprecated)]
86 let content = assign!(RoomCreateEventContent::new_v11(), {
87 creator: Some(creator.clone()),
88 federate,
89 room_version,
90 predecessor,
91 room_type,
92 });
93
94 (content, creator)
95 }
96}
97
98pub type RedactedRoomCreateWithCreatorEventContent = RoomCreateWithCreatorEventContent;
100
101impl RedactedStateEventContent for RedactedRoomCreateWithCreatorEventContent {
102 type StateKey = EmptyStateKey;
103}
104
105impl RedactContent for RoomCreateWithCreatorEventContent {
106 type Redacted = RedactedRoomCreateWithCreatorEventContent;
107
108 fn redact(self, version: &RoomVersionId) -> Self::Redacted {
109 let (content, sender) = self.into_event_content();
110 let content = content.redact(version);
112 Self::from_event_content(content, sender)
113 }
114}
115
116fn default_create_room_version_id() -> RoomVersionId {
117 RoomVersionId::V1
118}