From 1377487b6ccfe7698f8ef709585cdf2ac1b63c1d Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Sun, 24 May 2020 00:03:39 +0200 Subject: [PATCH] Declare more state event content structs without ruma_event! --- src/room/encryption.rs | 39 +++++++------- src/room/guest_access.rs | 24 ++++----- src/room/history_visibility.rs | 20 +++----- src/room/join_rules.rs | 18 +++---- src/room/member.rs | 94 ++++++++++++++++------------------ 5 files changed, 88 insertions(+), 107 deletions(-) diff --git a/src/room/encryption.rs b/src/room/encryption.rs index a2f63014..9632d4af 100644 --- a/src/room/encryption.rs +++ b/src/room/encryption.rs @@ -1,30 +1,27 @@ //! Types for the *m.room.encryption* event. use js_int::UInt; -use ruma_events_macros::ruma_event; +use ruma_events_macros::{FromRaw, StateEventContent}; +use serde::Serialize; use crate::Algorithm; -ruma_event! { - /// Defines how messages sent in this room should be encrypted. - EncryptionEvent { - kind: StateEvent, - event_type: "m.room.encryption", - content: { - /// The encryption algorithm to be used to encrypt messages sent in this room. - /// - /// Must be `m.megolm.v1.aes-sha2`. - pub algorithm: Algorithm, +/// Defines how messages sent in this room should be encrypted. +#[derive(Clone, Debug, Serialize, FromRaw, StateEventContent)] +#[ruma_event(type = "m.room.encryption")] +pub struct EncryptionEventContent { + /// The encryption algorithm to be used to encrypt messages sent in this room. + /// + /// Must be `m.megolm.v1.aes-sha2`. + pub algorithm: Algorithm, - /// How long the session should be used before changing it. - /// - /// 604800000 (a week) is the recommended default. - pub rotation_period_ms: Option, + /// How long the session should be used before changing it. + /// + /// 604800000 (a week) is the recommended default. + pub rotation_period_ms: Option, - /// How many messages should be sent before changing the session. - /// - /// 100 is the recommended default. - pub rotation_period_msgs: Option, - }, - } + /// How many messages should be sent before changing the session. + /// + /// 100 is the recommended default. + pub rotation_period_msgs: Option, } diff --git a/src/room/guest_access.rs b/src/room/guest_access.rs index 853b1401..cad2df3e 100644 --- a/src/room/guest_access.rs +++ b/src/room/guest_access.rs @@ -1,22 +1,18 @@ //! Types for the *m.room.guest_access* event. -use ruma_events_macros::ruma_event; +use ruma_events_macros::{FromRaw, StateEventContent}; use serde::{Deserialize, Serialize}; use strum::{Display, EnumString}; -ruma_event! { - /// Controls whether guest users are allowed to join rooms. - /// - /// This event controls whether guest users are allowed to join rooms. If this event is absent, - /// servers should act as if it is present and has the value `GuestAccess::Forbidden`. - GuestAccessEvent { - kind: StateEvent, - event_type: "m.room.guest_access", - content: { - /// A policy for guest user access to a room. - pub guest_access: GuestAccess, - }, - } +/// Controls whether guest users are allowed to join rooms. +/// +/// This event controls whether guest users are allowed to join rooms. If this event is absent, +/// servers should act as if it is present and has the value `GuestAccess::Forbidden`. +#[derive(Clone, Debug, Serialize, FromRaw, StateEventContent)] +#[ruma_event(type = "m.room.guest_access")] +pub struct GuestAccessEventContent { + /// A policy for guest user access to a room. + pub guest_access: GuestAccess, } /// A policy for guest user access to a room. diff --git a/src/room/history_visibility.rs b/src/room/history_visibility.rs index 7be718f5..b85891cd 100644 --- a/src/room/history_visibility.rs +++ b/src/room/history_visibility.rs @@ -1,20 +1,16 @@ //! Types for the *m.room.history_visibility* event. -use ruma_events_macros::ruma_event; +use ruma_events_macros::{FromRaw, StateEventContent}; use serde::{Deserialize, Serialize}; use strum::{Display, EnumString}; -ruma_event! { - /// This event controls whether a member of a room can see the events that happened in a room - /// from before they joined. - HistoryVisibilityEvent { - kind: StateEvent, - event_type: "m.room.history_visibility", - content: { - /// Who can see the room history. - pub history_visibility: HistoryVisibility, - }, - } +/// This event controls whether a member of a room can see the events that happened in a room +/// from before they joined. +#[derive(Clone, Debug, Serialize, FromRaw, StateEventContent)] +#[ruma_event(type = "m.room.history_visibility")] +pub struct HistoryVisibilityEventContent { + /// Who can see the room history. + pub history_visibility: HistoryVisibility, } /// Who can see a room's history. diff --git a/src/room/join_rules.rs b/src/room/join_rules.rs index eea3ff63..e22072c8 100644 --- a/src/room/join_rules.rs +++ b/src/room/join_rules.rs @@ -1,19 +1,15 @@ //! Types for the *m.room.join_rules* event. -use ruma_events_macros::ruma_event; +use ruma_events_macros::{FromRaw, StateEventContent}; use serde::{Deserialize, Serialize}; use strum::{Display, EnumString}; -ruma_event! { - /// Describes how users are allowed to join the room. - JoinRulesEvent { - kind: StateEvent, - event_type: "m.room.join_rules", - content: { - /// The type of rules used for users wishing to join this room. - pub join_rule: JoinRule, - }, - } +/// Describes how users are allowed to join the room. +#[derive(Clone, Debug, Serialize, FromRaw, StateEventContent)] +#[ruma_event(type = "m.room.join_rules")] +pub struct JoinRulesEventContent { + /// The type of rules used for users wishing to join this room. + pub join_rule: JoinRule, } /// The rule used for users wishing to join this room. diff --git a/src/room/member.rs b/src/room/member.rs index d43d270b..b9052780 100644 --- a/src/room/member.rs +++ b/src/room/member.rs @@ -2,63 +2,59 @@ use std::collections::BTreeMap; -use ruma_events_macros::ruma_event; +use ruma_events_macros::{FromRaw, StateEventContent}; use ruma_identifiers::UserId; use serde::{Deserialize, Serialize}; use strum::{Display, EnumString}; -ruma_event! { - /// The current membership state of a user in the room. - /// - /// Adjusts the membership state for a user in a room. It is preferable to use the membership - /// APIs (`/rooms//invite` etc) when performing membership actions rather than - /// adjusting the state directly as there are a restricted set of valid transformations. For - /// example, user A cannot force user B to join a room, and trying to force this state change - /// directly will fail. - /// - /// The `third_party_invite` property will be set if this invite is an *invite* event and is the - /// successor of an *m.room.third_party_invite* event, and absent otherwise. - /// - /// This event may also include an `invite_room_state` key inside the event's unsigned data. If - /// present, this contains an array of `StrippedState` events. These events provide information - /// on a subset of state events such as the room name. Note that ruma-events treats unsigned - /// data on events as arbitrary JSON values, and the ruma-events types for this event don't - /// provide direct access to `invite_room_state`. If you need this data, you must extract and - /// convert it from a `serde_json::Value` yourself. - /// - /// The user for which a membership applies is represented by the `state_key`. Under some - /// conditions, the `sender` and `state_key` may not match - this may be interpreted as the - /// `sender` affecting the membership state of the `state_key` user. - /// - /// The membership for a given user can change over time. Previous membership can be retrieved - /// from the `prev_content` object on an event. If not present, the user's previous membership - /// must be assumed as leave. - MemberEvent { - kind: StateEvent, - event_type: "m.room.member", - content: { - /// The avatar URL for this user, if any. This is added by the homeserver. - #[serde(skip_serializing_if = "Option::is_none")] - pub avatar_url: Option, +/// The current membership state of a user in the room. +/// +/// Adjusts the membership state for a user in a room. It is preferable to use the membership +/// APIs (`/rooms//invite` etc) when performing membership actions rather than +/// adjusting the state directly as there are a restricted set of valid transformations. For +/// example, user A cannot force user B to join a room, and trying to force this state change +/// directly will fail. +/// +/// The `third_party_invite` property will be set if this invite is an *invite* event and is the +/// successor of an *m.room.third_party_invite* event, and absent otherwise. +/// +/// This event may also include an `invite_room_state` key inside the event's unsigned data. If +/// present, this contains an array of `StrippedState` events. These events provide information +/// on a subset of state events such as the room name. Note that ruma-events treats unsigned +/// data on events as arbitrary JSON values, and the ruma-events types for this event don't +/// provide direct access to `invite_room_state`. If you need this data, you must extract and +/// convert it from a `serde_json::Value` yourself. +/// +/// The user for which a membership applies is represented by the `state_key`. Under some +/// conditions, the `sender` and `state_key` may not match - this may be interpreted as the +/// `sender` affecting the membership state of the `state_key` user. +/// +/// The membership for a given user can change over time. Previous membership can be retrieved +/// from the `prev_content` object on an event. If not present, the user's previous membership +/// must be assumed as leave. +#[derive(Clone, Debug, Serialize, FromRaw, StateEventContent)] +#[ruma_event(type = "m.room.member")] +pub struct MemberEventContent { + /// The avatar URL for this user, if any. This is added by the homeserver. + #[serde(skip_serializing_if = "Option::is_none")] + pub avatar_url: Option, - /// The display name for this user, if any. This is added by the homeserver. - #[serde(skip_serializing_if = "Option::is_none")] - pub displayname: Option, + /// The display name for this user, if any. This is added by the homeserver. + #[serde(skip_serializing_if = "Option::is_none")] + pub displayname: Option, - /// Flag indicating if the room containing this event was created - /// with the intention of being a direct chat. - #[serde(skip_serializing_if = "Option::is_none")] - pub is_direct: Option, + /// Flag indicating if the room containing this event was created + /// with the intention of being a direct chat. + #[serde(skip_serializing_if = "Option::is_none")] + pub is_direct: Option, - /// The membership state of this user. - pub membership: MembershipState, + /// The membership state of this user. + pub membership: MembershipState, - /// If this member event is the successor to a third party invitation, this field will - /// contain information about that invitation. - #[serde(skip_serializing_if = "Option::is_none")] - pub third_party_invite: Option, - }, - } + /// If this member event is the successor to a third party invitation, this field will + /// contain information about that invitation. + #[serde(skip_serializing_if = "Option::is_none")] + pub third_party_invite: Option, } /// The membership state of a user.