From 51ad28081e9bc2620f8a05050fa0c2b5f6f29fb5 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Sat, 2 May 2020 21:25:02 +0200 Subject: [PATCH] Use ruma_event! for room::server_acl --- src/room/server_acl.rs | 193 +++++++---------------------------------- 1 file changed, 32 insertions(+), 161 deletions(-) diff --git a/src/room/server_acl.rs b/src/room/server_acl.rs index e0535510..dc9d17ff 100644 --- a/src/room/server_acl.rs +++ b/src/room/server_acl.rs @@ -1,170 +1,41 @@ //! Types for the *m.room.server_acl* event. -use std::time::SystemTime; - -use ruma_identifiers::{EventId, RoomId, UserId}; -use serde::{Deserialize, Serialize}; - -use crate::{EventType, FromRaw, UnsignedData}; - -/// An event to indicate which servers are permitted to participate in the room. -#[derive(Clone, Debug, Serialize)] -#[serde(rename = "m.room.server_acl", tag = "type")] -pub struct ServerAclEvent { - /// The event's content. - pub content: ServerAclEventContent, - - /// The unique identifier for the event. - pub event_id: EventId, - - /// Time on originating homeserver when this event was sent. - #[serde(with = "ruma_serde::time::ms_since_unix_epoch")] - pub origin_server_ts: SystemTime, - - /// The previous content for this state key, if any. - #[serde(skip_serializing_if = "Option::is_none")] - pub prev_content: Option, - - /// The unique identifier for the room associated with this event. - #[serde(skip_serializing_if = "Option::is_none")] - pub room_id: Option, - - /// The unique identifier for the user who sent this event. - pub sender: UserId, - - /// A key that determines which piece of room state the event represents. - pub state_key: String, - - /// Additional key-value pairs not signed by the homeserver. - #[serde(skip_serializing_if = "UnsignedData::is_empty")] - pub unsigned: UnsignedData, -} - -/// The payload for `ServerAclEvent`. -#[derive(Clone, Debug, Serialize)] -pub struct ServerAclEventContent { - /// True to allow server names that are IP address literals. False to deny. Defaults to true if - /// missing or otherwise not a boolean. - /// - /// This is strongly recommended to be set to false as servers running with IP literal names are - /// strongly discouraged in order to require legitimate homeservers to be backed by a valid - /// registered domain name. - #[serde(default = "ruma_serde::default_true")] - pub allow_ip_literals: bool, - - /// The server names to allow in the room, excluding any port information. Wildcards may be used - /// to cover a wider range of hosts, where * matches zero or more characters and ? matches - /// exactly one character. - /// - /// **This defaults to an empty list when not provided, effectively disallowing every server.** - #[serde(default)] - pub allow: Vec, - - /// The server names to disallow in the room, excluding any port information. Wildcards may be - /// used to cover a wider range of hosts, where * matches zero or more characters and ? matches - /// exactly one character. - /// - /// This defaults to an empty list when not provided. - #[serde(default)] - pub deny: Vec, -} - -impl FromRaw for ServerAclEvent { - type Raw = raw::ServerAclEvent; - - fn from_raw(raw: raw::ServerAclEvent) -> Self { - Self { - content: FromRaw::from_raw(raw.content), - event_id: raw.event_id, - origin_server_ts: raw.origin_server_ts, - prev_content: raw.prev_content.map(FromRaw::from_raw), - room_id: raw.room_id, - sender: raw.sender, - state_key: raw.state_key, - unsigned: raw.unsigned, - } - } -} - -impl FromRaw for ServerAclEventContent { - type Raw = raw::ServerAclEventContent; - - fn from_raw(raw: raw::ServerAclEventContent) -> Self { - Self { - allow_ip_literals: raw.allow_ip_literals, - allow: raw.allow, - deny: raw.deny, - } - } -} - -impl_state_event!( - ServerAclEvent, - ServerAclEventContent, - EventType::RoomServerAcl -); - -pub(crate) mod raw { - use super::*; +use ruma_events_macros::ruma_event; +ruma_event! { /// An event to indicate which servers are permitted to participate in the room. - #[derive(Clone, Debug, Deserialize)] - pub struct ServerAclEvent { - /// The event's content. - pub content: ServerAclEventContent, + ServerAclEvent { + kind: StateEvent, + event_type: "m.room.server_acl", + content: { + /// True to allow server names that are IP address literals. False to deny. + /// + /// This is strongly recommended to be set to false as servers running with IP literal + /// names are strongly discouraged in order to require legitimate homeservers to be + /// backed by a valid registered domain name. + #[serde( + default = "ruma_serde::default_true", + skip_serializing_if = "ruma_serde::is_true" + )] + pub allow_ip_literals: bool, - /// The unique identifier for the event. - pub event_id: EventId, + /// The server names to allow in the room, excluding any port information. Wildcards may + /// be used to cover a wider range of hosts, where `*` matches zero or more characters + /// and `?` matches exactly one character. + /// + /// **This defaults to an empty list when not provided, effectively disallowing every + /// server.** + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub allow: Vec, - /// Time on originating homeserver when this event was sent. - #[serde(with = "ruma_serde::time::ms_since_unix_epoch")] - pub origin_server_ts: SystemTime, - - /// The previous content for this state key, if any. - pub prev_content: Option, - - /// The unique identifier for the room associated with this event. - pub room_id: Option, - - /// Additional key-value pairs not signed by the homeserver. - #[serde(default)] - pub unsigned: UnsignedData, - - /// The unique identifier for the user who sent this event. - pub sender: UserId, - - /// A key that determines which piece of room state the event represents. - pub state_key: String, - } - - /// The payload for `ServerAclEvent`. - #[derive(Clone, Debug, Deserialize)] - pub struct ServerAclEventContent { - /// True to allow server names that are IP address literals. False to deny. Defaults to true - /// if missing or otherwise not a boolean. - /// - /// This is strongly recommended to be set to false as servers running with IP literal names - /// are strongly discouraged in order to require legitimate homeservers to be backed by a - /// valid registered domain name. - #[serde(default = "ruma_serde::default_true")] - pub allow_ip_literals: bool, - - /// The server names to allow in the room, excluding any port information. Wildcards may be - /// used to cover a wider range of hosts, where * matches zero or more characters and ? - /// matches exactly one character. - /// - /// **This defaults to an empty list when not provided, effectively disallowing every - /// server.** - #[serde(default)] - pub allow: Vec, - - /// The server names to disallow in the room, excluding any port information. Wildcards may - /// be used to cover a wider range of hosts, where * matches zero or more characters and ? - /// matches exactly one character. - /// - /// This defaults to an empty list when not provided. - #[serde(default)] - pub deny: Vec, + /// The server names to disallow in the room, excluding any port information. Wildcards may + /// be used to cover a wider range of hosts, where * matches zero or more characters and ? + /// matches exactly one character. + /// + /// This defaults to an empty list when not provided. + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub deny: Vec, + } } }