Add event_enums.rs

only contains AnyStateEvent for now, more will be added
This commit is contained in:
Jonas Platte 2020-06-07 20:18:07 +02:00
parent d3b17e2b5b
commit 8c271fb835
No known key found for this signature in database
GPG Key ID: 7D261D771D915378
2 changed files with 60 additions and 0 deletions

58
src/event_enums.rs Normal file
View File

@ -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<AnyWhateverEventContent> 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<AliasesEventContent>),
/// An `m.room.avatar` event.
RoomAvatar(StateEvent<AvatarEventContent>),
/// An `m.room.canonical_alias` event.
RoomCanonicalAlias(StateEvent<CanonicalAliasEventContent>),
/// An `m.room.create` event.
RoomCreate(StateEvent<CreateEventContent>),
/// An `m.room.encryption` event.
RoomEncryption(StateEvent<EncryptionEventContent>),
/// An `m.room.guest_access` event.
RoomGuestAccess(StateEvent<GuestAccessEventContent>),
/// An `m.room.history_visibility` event.
RoomHistoryVisibility(StateEvent<HistoryVisibilityEventContent>),
/// An `m.room.join_rules` event.
RoomJoinRules(StateEvent<JoinRulesEventContent>),
/// An `m.room.member` event.
RoomMember(StateEvent<MemberEventContent>),
/// An `m.room.name` event.
RoomName(StateEvent<NameEventContent>),
/// An `m.room.pinned_events` event.
RoomPinnedEvents(StateEvent<PinnedEventsEventContent>),
/// An `m.room.power_levels` event.
RoomPowerLevels(StateEvent<PowerLevelsEventContent>),
/// An `m.room.server_acl` event.
RoomServerAcl(StateEvent<ServerAclEventContent>),
/// An `m.room.third_party_invite` event.
RoomThirdPartyInvite(StateEvent<ThirdPartyInviteEventContent>),
/// An `m.room.tombstone` event.
RoomTombstone(StateEvent<TombstoneEventContent>),
/// An `m.room.topic` event.
RoomTopic(StateEvent<TopicEventContent>),
}

View File

@ -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},