From b6558c64a00d4b1330826a2f8fcddb8c609d1694 Mon Sep 17 00:00:00 2001 From: Devin Ragotzy Date: Fri, 14 May 2021 05:31:15 -0400 Subject: [PATCH] Add global and room account content traits and to device trait --- crates/ruma-events-macros/src/event_content.rs | 15 +++++++++------ crates/ruma-events/src/custom.rs | 11 ++++++++--- crates/ruma-events/src/direct.rs | 2 +- crates/ruma-events/src/event_kinds.rs | 9 +++++---- crates/ruma-events/src/fully_read.rs | 2 +- crates/ruma-events/src/ignored_user_list.rs | 2 +- crates/ruma-events/src/lib.rs | 10 ++++++++-- crates/ruma-events/src/push_rules.rs | 2 +- crates/ruma-events/src/tag.rs | 2 +- 9 files changed, 35 insertions(+), 20 deletions(-) diff --git a/crates/ruma-events-macros/src/event_content.rs b/crates/ruma-events-macros/src/event_content.rs index c9235f9c..7d9e9751 100644 --- a/crates/ruma-events-macros/src/event_content.rs +++ b/crates/ruma-events-macros/src/event_content.rs @@ -286,16 +286,18 @@ fn generate_event_content_derives( ruma_events: &TokenStream, ) -> syn::Result { let msg = "valid event kinds are GlobalAccountData, RoomAccountData, \ - EphemeralRoom, Message, State, ToDevice"; + EphemeralRoom, Message, State, ToDevice"; content_attr .iter() .map(|kind| { Ok(match kind { EventKind::GlobalAccountData => quote! { - // TODO: will this be it's own trait at some point? + #[automatically_derived] + impl #ruma_events::GlobalAccountDataEventContent for #ident {} }, EventKind::RoomAccountData => quote! { - // TODO: will this be it's own trait at some point? + #[automatically_derived] + impl #ruma_events::RoomAccountDataEventContent for #ident {} }, EventKind::Ephemeral => quote! { #[automatically_derived] @@ -314,10 +316,11 @@ fn generate_event_content_derives( impl #ruma_events::StateEventContent for #ident {} }, EventKind::ToDevice => quote! { - // TODO: will this be it's own trait at some point? + #[automatically_derived] + impl #ruma_events::ToDeviceEventContent for #ident {} }, - EventKind::Redaction => return Err(syn::Error::new(ident.span(), msg)), - EventKind::Presence => return Err(syn::Error::new(ident.span(), msg)), + EventKind::Redaction => return Err(syn::Error::new_spanned(ident, msg)), + EventKind::Presence => return Err(syn::Error::new_spanned(ident, msg)), }) }) .collect() diff --git a/crates/ruma-events/src/custom.rs b/crates/ruma-events/src/custom.rs index 0331eb19..1939015c 100644 --- a/crates/ruma-events/src/custom.rs +++ b/crates/ruma-events/src/custom.rs @@ -7,9 +7,10 @@ use serde::Serialize; use serde_json::{value::RawValue as RawJsonValue, Value as JsonValue}; use crate::{ - BasicEventContent, EphemeralRoomEventContent, EventContent, HasDeserializeFields, + EphemeralRoomEventContent, EventContent, GlobalAccountDataEventContent, HasDeserializeFields, MessageEventContent, RedactedEventContent, RedactedMessageEventContent, - RedactedStateEventContent, RoomEventContent, StateEventContent, + RedactedStateEventContent, RoomAccountDataEventContent, RoomEventContent, StateEventContent, + ToDeviceEventContent, }; /// A custom event's type and `content` JSON object. @@ -46,7 +47,11 @@ impl EventContent for CustomEventContent { // they can be used for any event kind. impl RoomEventContent for CustomEventContent {} -impl BasicEventContent for CustomEventContent {} +impl GlobalAccountDataEventContent for CustomEventContent {} + +impl RoomAccountDataEventContent for CustomEventContent {} + +impl ToDeviceEventContent for CustomEventContent {} impl EphemeralRoomEventContent for CustomEventContent {} diff --git a/crates/ruma-events/src/direct.rs b/crates/ruma-events/src/direct.rs index 904a0ad0..949c4f0e 100644 --- a/crates/ruma-events/src/direct.rs +++ b/crates/ruma-events/src/direct.rs @@ -17,7 +17,7 @@ pub type DirectEvent = crate::GlobalAccountDataEvent; /// A mapping of `UserId`s to a list of `RoomId`s which are considered *direct* for that /// particular user. #[derive(Clone, Debug, Deserialize, Serialize, EventContent)] -#[ruma_event(type = "m.direct")] +#[ruma_event(type = "m.direct", kind = GlobalAccountData)] pub struct DirectEventContent(pub BTreeMap>); impl Deref for DirectEventContent { diff --git a/crates/ruma-events/src/event_kinds.rs b/crates/ruma-events/src/event_kinds.rs index 34cb890e..73a0b961 100644 --- a/crates/ruma-events/src/event_kinds.rs +++ b/crates/ruma-events/src/event_kinds.rs @@ -3,20 +3,21 @@ use ruma_events_macros::Event; use ruma_identifiers::{EventId, RoomId, UserId}; use crate::{ - EphemeralRoomEventContent, EventContent, MessageEventContent, RedactedMessageEventContent, - RedactedStateEventContent, RedactedSyncUnsigned, RedactedUnsigned, StateEventContent, Unsigned, + EphemeralRoomEventContent, EventContent, GlobalAccountDataEventContent, MessageEventContent, + RedactedMessageEventContent, RedactedStateEventContent, RedactedSyncUnsigned, RedactedUnsigned, + RoomAccountDataEventContent, StateEventContent, Unsigned, }; /// A global account data event. #[derive(Clone, Debug, Event)] -pub struct GlobalAccountDataEvent { +pub struct GlobalAccountDataEvent { /// Data specific to the event type. pub content: C, } /// A room account data event. #[derive(Clone, Debug, Event)] -pub struct RoomAccountDataEvent { +pub struct RoomAccountDataEvent { /// Data specific to the event type. pub content: C, } diff --git a/crates/ruma-events/src/fully_read.rs b/crates/ruma-events/src/fully_read.rs index 76f2c8de..38682c5c 100644 --- a/crates/ruma-events/src/fully_read.rs +++ b/crates/ruma-events/src/fully_read.rs @@ -14,7 +14,7 @@ pub type FullyReadEvent = RoomAccountDataEvent; /// The payload for `FullyReadEvent`. #[derive(Clone, Debug, Deserialize, Serialize, EventContent)] -#[ruma_event(type = "m.fully_read")] +#[ruma_event(type = "m.fully_read", kind = RoomAccountData)] pub struct FullyReadEventContent { /// The event the user's read marker is located at in the room. pub event_id: EventId, diff --git a/crates/ruma-events/src/ignored_user_list.rs b/crates/ruma-events/src/ignored_user_list.rs index e60d1e8a..8c7a47ad 100644 --- a/crates/ruma-events/src/ignored_user_list.rs +++ b/crates/ruma-events/src/ignored_user_list.rs @@ -12,7 +12,7 @@ pub type IgnoredUserListEvent = GlobalAccountDataEvent; /// The payload for `PushRulesEvent`. #[derive(Clone, Debug, Deserialize, Serialize, EventContent)] -#[ruma_event(type = "m.push_rules")] +#[ruma_event(type = "m.push_rules", kind = GlobalAccountData)] pub struct PushRulesEventContent { /// The global ruleset. pub global: Ruleset, diff --git a/crates/ruma-events/src/tag.rs b/crates/ruma-events/src/tag.rs index 96d4133c..f093d971 100644 --- a/crates/ruma-events/src/tag.rs +++ b/crates/ruma-events/src/tag.rs @@ -17,7 +17,7 @@ pub type Tags = BTreeMap; /// The payload for `TagEvent`. #[derive(Clone, Debug, Deserialize, Serialize, EventContent)] #[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)] -#[ruma_event(type = "m.tag")] +#[ruma_event(type = "m.tag", kind = RoomAccountData)] pub struct TagEventContent { /// A map of tag names to tag info. pub tags: Tags,