From 8c271fb835983f166c14627deec8725282e94f2e Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Sun, 7 Jun 2020 20:18:07 +0200 Subject: [PATCH] Add event_enums.rs only contains AnyStateEvent for now, more will be added --- src/event_enums.rs | 58 ++++++++++++++++++++++++++++++++++++++++++++++ src/lib.rs | 2 ++ 2 files changed, 60 insertions(+) create mode 100644 src/event_enums.rs diff --git a/src/event_enums.rs b/src/event_enums.rs new file mode 100644 index 00000000..e0e4d1c5 --- /dev/null +++ b/src/event_enums.rs @@ -0,0 +1,58 @@ +use serde::{Deserialize, Serialize}; + +use crate::{ + room::{ + aliases::AliasesEventContent, avatar::AvatarEventContent, + canonical_alias::CanonicalAliasEventContent, create::CreateEventContent, + encryption::EncryptionEventContent, guest_access::GuestAccessEventContent, + history_visibility::HistoryVisibilityEventContent, join_rules::JoinRulesEventContent, + member::MemberEventContent, name::NameEventContent, + pinned_events::PinnedEventsEventContent, power_levels::PowerLevelsEventContent, + server_acl::ServerAclEventContent, third_party_invite::ThirdPartyInviteEventContent, + tombstone::TombstoneEventContent, topic::TopicEventContent, + }, + StateEvent, +}; + +// TODO: Optimize `Deserialize` implementations. +// It should be possible to first deserialize into CatchAllEvent and +// transform that, which should have much more consistent performance than trying all variants +// in order. + +/// Any state event. +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(untagged)] +pub enum AnyStateEvent { + /// An `m.room.aliases` event. + RoomAliases(StateEvent), + /// An `m.room.avatar` event. + RoomAvatar(StateEvent), + /// An `m.room.canonical_alias` event. + RoomCanonicalAlias(StateEvent), + /// An `m.room.create` event. + RoomCreate(StateEvent), + /// An `m.room.encryption` event. + RoomEncryption(StateEvent), + /// An `m.room.guest_access` event. + RoomGuestAccess(StateEvent), + /// An `m.room.history_visibility` event. + RoomHistoryVisibility(StateEvent), + /// An `m.room.join_rules` event. + RoomJoinRules(StateEvent), + /// An `m.room.member` event. + RoomMember(StateEvent), + /// An `m.room.name` event. + RoomName(StateEvent), + /// An `m.room.pinned_events` event. + RoomPinnedEvents(StateEvent), + /// An `m.room.power_levels` event. + RoomPowerLevels(StateEvent), + /// An `m.room.server_acl` event. + RoomServerAcl(StateEvent), + /// An `m.room.third_party_invite` event. + RoomThirdPartyInvite(StateEvent), + /// An `m.room.tombstone` event. + RoomTombstone(StateEvent), + /// An `m.room.topic` event. + RoomTopic(StateEvent), +} diff --git a/src/lib.rs b/src/lib.rs index 2821adbc..094b5151 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -132,6 +132,7 @@ pub use ruma_serde::empty::Empty; mod algorithm; mod content_enums; mod error; +mod event_enums; mod event_kinds; mod event_type; mod from_raw; @@ -167,6 +168,7 @@ pub use self::{ algorithm::Algorithm, content_enums::{AnyMessageEventContent, AnyStateEventContent}, error::{FromStrError, InvalidEvent, InvalidInput}, + event_enums::AnyStateEvent, event_kinds::{MessageEvent, StateEvent}, event_type::EventType, from_raw::{FromRaw, TryFromRaw},