diff --git a/src/room.rs b/src/room.rs index dc115e74..e170bd61 100644 --- a/src/room.rs +++ b/src/room.rs @@ -9,7 +9,7 @@ use serde::{Deserialize, Serialize}; pub mod aliases; pub mod avatar; -// pub mod canonical_alias; +pub mod canonical_alias; pub mod create; pub mod encrypted; pub mod encryption; @@ -17,12 +17,12 @@ pub mod guest_access; pub mod history_visibility; pub mod join_rules; pub mod member; -// pub mod message; -// pub mod name; -// pub mod pinned_events; -// pub mod power_levels; +pub mod message; +pub mod name; +pub mod pinned_events; +pub mod power_levels; pub mod redaction; -// pub mod server_acl; +pub mod server_acl; pub mod third_party_invite; pub mod tombstone; pub mod topic; diff --git a/src/room/canonical_alias.rs b/src/room/canonical_alias.rs index 59c7f51f..f663bf70 100644 --- a/src/room/canonical_alias.rs +++ b/src/room/canonical_alias.rs @@ -31,15 +31,15 @@ mod tests { time::{Duration, UNIX_EPOCH}, }; - use ruma_identifiers::{EventId, RoomAliasId, UserId}; + use ruma_identifiers::{EventId, RoomAliasId, RoomId, UserId}; use serde_json::{from_value as from_json_value, json, to_value as to_json_value}; - use super::{CanonicalAliasEvent, CanonicalAliasEventContent}; - use crate::{EventJson, UnsignedData}; + use super::CanonicalAliasEventContent; + use crate::{EventJson, StateEvent, UnsignedData}; #[test] fn serialization_with_optional_fields_as_none() { - let canonical_alias_event = CanonicalAliasEvent { + let canonical_alias_event = StateEvent { content: CanonicalAliasEventContent { alias: Some(RoomAliasId::try_from("#somewhere:localhost").unwrap()), alt_aliases: Vec::new(), @@ -47,7 +47,7 @@ mod tests { event_id: EventId::try_from("$h29iv0s8:example.com").unwrap(), origin_server_ts: UNIX_EPOCH + Duration::from_millis(1), prev_content: None, - room_id: None, + room_id: RoomId::try_from("!dummy:example.com").unwrap(), sender: UserId::try_from("@carl:example.com").unwrap(), state_key: "".to_string(), unsigned: UnsignedData::default(), @@ -60,6 +60,7 @@ mod tests { }, "event_id": "$h29iv0s8:example.com", "origin_server_ts": 1, + "room_id": "!dummy:example.com", "sender": "@carl:example.com", "state_key": "", "type": "m.room.canonical_alias" @@ -74,13 +75,14 @@ mod tests { "content": {}, "event_id": "$h29iv0s8:example.com", "origin_server_ts": 1, + "room_id": "!dummy:example.com", "sender": "@carl:example.com", "state_key": "", "type": "m.room.canonical_alias" }); assert_eq!( - from_json_value::>(json_data) + from_json_value::>>(json_data) .unwrap() .deserialize() .unwrap() @@ -98,12 +100,13 @@ mod tests { }, "event_id": "$h29iv0s8:example.com", "origin_server_ts": 1, + "room_id": "!dummy:example.com", "sender": "@carl:example.com", "state_key": "", "type": "m.room.canonical_alias" }); assert_eq!( - from_json_value::>(json_data) + from_json_value::>>(json_data) .unwrap() .deserialize() .unwrap() @@ -121,12 +124,13 @@ mod tests { }, "event_id": "$h29iv0s8:example.com", "origin_server_ts": 1, + "room_id": "!dummy:example.com", "sender": "@carl:example.com", "state_key": "", "type": "m.room.canonical_alias" }); assert_eq!( - from_json_value::>(json_data) + from_json_value::>>(json_data) .unwrap() .deserialize() .unwrap() @@ -145,12 +149,13 @@ mod tests { }, "event_id": "$h29iv0s8:example.com", "origin_server_ts": 1, + "room_id": "!dummy:example.com", "sender": "@carl:example.com", "state_key": "", "type": "m.room.canonical_alias" }); assert_eq!( - from_json_value::>(json_data) + from_json_value::>>(json_data) .unwrap() .deserialize() .unwrap() diff --git a/src/room/message.rs b/src/room/message.rs index 5d6fc0d7..b833a787 100644 --- a/src/room/message.rs +++ b/src/room/message.rs @@ -3,6 +3,7 @@ use std::time::SystemTime; use js_int::UInt; +use ruma_events_macros::MessageEventContent; use ruma_identifiers::{EventId, RoomId, UserId}; use serde::{Deserialize, Serialize}; @@ -12,7 +13,8 @@ use crate::{FromRaw, UnsignedData}; pub mod feedback; /// The payload for `MessageEvent`. -#[derive(Clone, Debug, Serialize)] +#[derive(Clone, Debug, Serialize, MessageEventContent)] +#[ruma_event(type = "m.room.message")] #[serde(tag = "msgtype")] pub enum MessageEventContent { /// An audio message. @@ -473,11 +475,11 @@ mod tests { use ruma_identifiers::{EventId, RoomId, UserId}; use serde_json::{from_value as from_json_value, json, to_value as to_json_value}; - use super::{ - AudioMessageEventContent, FormattedBody, MessageEvent, MessageEventContent, MessageFormat, + use super::{AudioMessageEventContent, FormattedBody, MessageEventContent, MessageFormat}; + use crate::{ + room::message::{InReplyTo, RelatesTo, TextMessageEventContent}, + EventJson, MessageEvent, UnsignedData, }; - use crate::room::message::{InReplyTo, RelatesTo, TextMessageEventContent}; - use crate::{EventJson, UnsignedData}; #[test] fn serialization() { @@ -490,7 +492,7 @@ mod tests { }), event_id: EventId::try_from("$143273582443PhrSn:example.org").unwrap(), origin_server_ts: UNIX_EPOCH + Duration::from_millis(10_000), - room_id: Some(RoomId::try_from("!testroomid:example.org").unwrap()), + room_id: RoomId::try_from("!testroomid:example.org").unwrap(), sender: UserId::try_from("@user:example.org").unwrap(), unsigned: UnsignedData::default(), }; diff --git a/src/room/name.rs b/src/room/name.rs index 9e782de0..58ae6cd1 100644 --- a/src/room/name.rs +++ b/src/room/name.rs @@ -2,13 +2,15 @@ use std::time::SystemTime; +use ruma_events_macros::StateEventContent; use ruma_identifiers::{EventId, RoomId, UserId}; use serde::{Deserialize, Serialize}; use crate::{InvalidInput, TryFromRaw, UnsignedData}; /// The payload for `NameEvent`. -#[derive(Clone, Debug, Serialize)] +#[derive(Clone, Debug, Serialize, StateEventContent)] +#[ruma_event(type = "m.room.name")] pub struct NameEventContent { /// The name of the room. This MUST NOT exceed 255 bytes. pub(crate) name: Option, @@ -76,20 +78,20 @@ mod tests { use ruma_identifiers::{EventId, RoomId, UserId}; use serde_json::{from_value as from_json_value, json, to_value as to_json_value}; - use crate::{EventJson, UnsignedData}; + use crate::{EventJson, StateEvent, UnsignedData}; use super::NameEventContent; #[test] fn serialization_with_optional_fields_as_none() { - let name_event = NameEvent { + let name_event = StateEvent { content: NameEventContent { name: Some("The room name".to_string()), }, event_id: EventId::try_from("$h29iv0s8:example.com").unwrap(), origin_server_ts: UNIX_EPOCH + Duration::from_millis(1), prev_content: None, - room_id: None, + room_id: RoomId::try_from("!n8f893n9:example.com").unwrap(), sender: UserId::try_from("@carl:example.com").unwrap(), state_key: "".to_string(), unsigned: UnsignedData::default(), @@ -102,6 +104,7 @@ mod tests { }, "event_id": "$h29iv0s8:example.com", "origin_server_ts": 1, + "room_id": "!n8f893n9:example.com", "sender": "@carl:example.com", "state_key": "", "type": "m.room.name" @@ -112,7 +115,7 @@ mod tests { #[test] fn serialization_with_all_fields() { - let name_event = NameEvent { + let name_event = StateEvent { content: NameEventContent { name: Some("The room name".to_string()), }, @@ -121,7 +124,7 @@ mod tests { prev_content: Some(NameEventContent { name: Some("The old name".to_string()), }), - room_id: Some(RoomId::try_from("!n8f893n9:example.com").unwrap()), + room_id: RoomId::try_from("!n8f893n9:example.com").unwrap(), sender: UserId::try_from("@carl:example.com").unwrap(), state_key: "".to_string(), unsigned: UnsignedData { @@ -156,12 +159,13 @@ mod tests { "content": {}, "event_id": "$h29iv0s8:example.com", "origin_server_ts": 1, + "room_id": "!n8f893n9:example.com", "sender": "@carl:example.com", "state_key": "", "type": "m.room.name" }); assert_eq!( - from_json_value::>(json_data) + from_json_value::>>(json_data) .unwrap() .deserialize() .unwrap() @@ -210,12 +214,13 @@ mod tests { }, "event_id": "$h29iv0s8:example.com", "origin_server_ts": 1, + "room_id": "!n8f893n9:example.com", "sender": "@carl:example.com", "state_key": "", "type": "m.room.name" }); assert_eq!( - from_json_value::>(json_data) + from_json_value::>>(json_data) .unwrap() .deserialize() .unwrap() @@ -233,12 +238,13 @@ mod tests { }, "event_id": "$h29iv0s8:example.com", "origin_server_ts": 1, + "room_id": "!n8f893n9:example.com", "sender": "@carl:example.com", "state_key": "", "type": "m.room.name" }); assert_eq!( - from_json_value::>(json_data) + from_json_value::>>(json_data) .unwrap() .deserialize() .unwrap() @@ -257,13 +263,14 @@ mod tests { }, "event_id": "$h29iv0s8:example.com", "origin_server_ts": 1, + "room_id": "!n8f893n9:example.com", "sender": "@carl:example.com", "state_key": "", "type": "m.room.name" }); assert_eq!( - from_json_value::>(json_data) + from_json_value::>>(json_data) .unwrap() .deserialize() .unwrap() diff --git a/src/room/pinned_events.rs b/src/room/pinned_events.rs index d4388b25..e3c008b4 100644 --- a/src/room/pinned_events.rs +++ b/src/room/pinned_events.rs @@ -22,10 +22,8 @@ mod tests { use ruma_identifiers::{EventId, RoomId, UserId}; use serde_json::to_string; - use crate::{ - room::pinned_events::{PinnedEventsEvent, PinnedEventsEventContent}, - EventJson, UnsignedData, - }; + use super::PinnedEventsEventContent; + use crate::{EventJson, StateEvent, UnsignedData}; #[test] fn serialization_deserialization() { @@ -34,23 +32,24 @@ mod tests { content.pinned.push(EventId::new("example.com").unwrap()); content.pinned.push(EventId::new("example.com").unwrap()); - let event = PinnedEventsEvent { + let event = StateEvent { content: content.clone(), event_id: EventId::new("example.com").unwrap(), origin_server_ts: UNIX_EPOCH + Duration::from_millis(1_432_804_485_886u64), prev_content: None, - room_id: Some(RoomId::new("example.com").unwrap()), + room_id: RoomId::new("example.com").unwrap(), sender: UserId::new("example.com").unwrap(), state_key: "".to_string(), unsigned: UnsignedData::default(), }; let serialized_event = to_string(&event).unwrap(); - let parsed_event: PinnedEventsEvent = - serde_json::from_str::>(&serialized_event) - .unwrap() - .deserialize() - .unwrap(); + let parsed_event = serde_json::from_str::>>( + &serialized_event, + ) + .unwrap() + .deserialize() + .unwrap(); assert_eq!(parsed_event.event_id, event.event_id); assert_eq!(parsed_event.room_id, event.room_id); diff --git a/src/room/power_levels.rs b/src/room/power_levels.rs index be78ea0a..dc02fe8b 100644 --- a/src/room/power_levels.rs +++ b/src/room/power_levels.rs @@ -138,16 +138,14 @@ mod tests { use ruma_identifiers::{EventId, RoomId, UserId}; use serde_json::{json, to_value as to_json_value}; - use super::{ - default_power_level, NotificationPowerLevels, PowerLevelsEvent, PowerLevelsEventContent, - }; - use crate::{EventType, UnsignedData}; + use super::{default_power_level, NotificationPowerLevels, PowerLevelsEventContent}; + use crate::{EventType, StateEvent, UnsignedData}; #[test] fn serialization_with_optional_fields_as_none() { let default = default_power_level(); - let power_levels_event = PowerLevelsEvent { + let power_levels_event = StateEvent { content: PowerLevelsEventContent { ban: default, events: BTreeMap::new(), @@ -163,7 +161,7 @@ mod tests { event_id: EventId::try_from("$h29iv0s8:example.com").unwrap(), origin_server_ts: UNIX_EPOCH + Duration::from_millis(1), prev_content: None, - room_id: None, + room_id: RoomId::try_from("!n8f893n9:example.com").unwrap(), unsigned: UnsignedData::default(), sender: UserId::try_from("@carl:example.com").unwrap(), state_key: "".to_string(), @@ -174,6 +172,7 @@ mod tests { "content": {}, "event_id": "$h29iv0s8:example.com", "origin_server_ts": 1, + "room_id": "!n8f893n9:example.com", "sender": "@carl:example.com", "state_key": "", "type": "m.room.power_levels" @@ -185,7 +184,7 @@ mod tests { #[test] fn serialization_with_all_fields() { let user = UserId::try_from("@carl:example.com").unwrap(); - let power_levels_event = PowerLevelsEvent { + let power_levels_event = StateEvent { content: PowerLevelsEventContent { ban: Int::from(23), events: btreemap! { @@ -225,7 +224,7 @@ mod tests { room: Int::from(42), }, }), - room_id: Some(RoomId::try_from("!n8f893n9:example.com").unwrap()), + room_id: RoomId::try_from("!n8f893n9:example.com").unwrap(), unsigned: UnsignedData { age: Some(Int::from(100)), ..UnsignedData::default() diff --git a/src/room/server_acl.rs b/src/room/server_acl.rs index dc9d17ff..c04a1b70 100644 --- a/src/room/server_acl.rs +++ b/src/room/server_acl.rs @@ -43,22 +43,26 @@ ruma_event! { mod tests { use serde_json::{from_value as from_json_value, json}; - use super::ServerAclEvent; - use crate::EventJson; + use super::ServerAclEventContent; + use crate::{EventJson, StateEvent}; #[test] fn default_values() { let json_data = json!({ "content": {}, - "event_id": "$h29iv0s8:example.com","origin_server_ts":1, + "event_id": "$h29iv0s8:example.com", + "origin_server_ts": 1, + "room_id": "!n8f893n9:example.com", "sender": "@carl:example.com", "state_key": "", "type": "m.room.server_acl" }); - let server_acl_event: ServerAclEvent = from_json_value::>(json_data) - .unwrap() - .deserialize() - .unwrap(); + + let server_acl_event = + from_json_value::>>(json_data) + .unwrap() + .deserialize() + .unwrap(); assert_eq!(server_acl_event.content.allow_ip_literals, true); assert!(server_acl_event.content.allow.is_empty());