From 27a9b36499ef6908cc385808b2163bb1e41e9f2c Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Thu, 21 May 2020 23:50:31 +0200 Subject: [PATCH] Delete collections module --- src/collections/all.rs | 560 ------------------------------- src/collections/only.rs | 218 ------------ src/collections/raw/all.rs | 651 ------------------------------------ src/collections/raw/only.rs | 255 -------------- src/lib.rs | 10 - 5 files changed, 1694 deletions(-) delete mode 100644 src/collections/all.rs delete mode 100644 src/collections/only.rs delete mode 100644 src/collections/raw/all.rs delete mode 100644 src/collections/raw/only.rs diff --git a/src/collections/all.rs b/src/collections/all.rs deleted file mode 100644 index 482ad296..00000000 --- a/src/collections/all.rs +++ /dev/null @@ -1,560 +0,0 @@ -//! Enums for heterogeneous collections of events, inclusive for every event type that implements -//! the trait of the same name. - -use serde::Serialize; - -use super::raw::all as raw; -use crate::{ - call::{ - answer::AnswerEvent, candidates::CandidatesEvent, hangup::HangupEvent, invite::InviteEvent, - }, - direct::DirectEvent, - dummy::DummyEvent, - forwarded_room_key::ForwardedRoomKeyEvent, - fully_read::FullyReadEvent, - ignored_user_list::IgnoredUserListEvent, - key::verification::{ - accept::AcceptEvent, cancel::CancelEvent, key::KeyEvent, mac::MacEvent, - request::RequestEvent, start::StartEvent, - }, - presence::PresenceEvent, - push_rules::PushRulesEvent, - receipt::ReceiptEvent, - room::{ - aliases::AliasesEvent, - avatar::AvatarEvent, - canonical_alias::CanonicalAliasEvent, - create::CreateEvent, - encrypted::EncryptedEvent, - encryption::EncryptionEvent, - guest_access::GuestAccessEvent, - history_visibility::HistoryVisibilityEvent, - join_rules::JoinRulesEvent, - member::MemberEvent, - message::{feedback::FeedbackEvent, MessageEvent}, - name::NameEvent, - pinned_events::PinnedEventsEvent, - power_levels::PowerLevelsEvent, - redaction::RedactionEvent, - server_acl::ServerAclEvent, - third_party_invite::ThirdPartyInviteEvent, - tombstone::TombstoneEvent, - topic::TopicEvent, - }, - room_key::RoomKeyEvent, - room_key_request::RoomKeyRequestEvent, - sticker::StickerEvent, - tag::TagEvent, - typing::TypingEvent, - CustomEvent, CustomRoomEvent, CustomStateEvent, TryFromRaw, -}; - -/// A basic event, room event, or state event. -#[derive(Clone, Debug, Serialize)] -#[serde(untagged)] -#[allow(clippy::large_enum_variant)] -pub enum Event { - /// m.call.answer - CallAnswer(AnswerEvent), - - /// m.call.candidates - CallCandidates(CandidatesEvent), - - /// m.call.hangup - CallHangup(HangupEvent), - - /// m.call.invite - CallInvite(InviteEvent), - - /// m.direct - Direct(DirectEvent), - - /// m.dummy - Dummy(DummyEvent), - - /// m.forwarded_room_key - ForwardedRoomKey(ForwardedRoomKeyEvent), - - /// m.fully_read - FullyRead(FullyReadEvent), - - /// m.ignored_user_list - IgnoredUserList(IgnoredUserListEvent), - - /// m.key.verification.accept - KeyVerificationAccept(AcceptEvent), - - /// m.key.verification.cancel - KeyVerificationCancel(CancelEvent), - - /// m.key.verification.key - KeyVerificationKey(KeyEvent), - - /// m.key.verification.mac - KeyVerificationMac(MacEvent), - - /// m.key.verification.request - KeyVerificationRequest(RequestEvent), - - /// m.key.verification.start - KeyVerificationStart(StartEvent), - - /// m.presence - Presence(PresenceEvent), - - /// m.push_rules - PushRules(PushRulesEvent), - - /// m.receipt - Receipt(ReceiptEvent), - - /// m.room.aliases - RoomAliases(AliasesEvent), - - /// m.room.avatar - RoomAvatar(AvatarEvent), - - /// m.room.canonical_alias - RoomCanonicalAlias(CanonicalAliasEvent), - - /// m.room.create - RoomCreate(CreateEvent), - - /// m.room.encrypted - RoomEncrypted(EncryptedEvent), - - /// m.room.encryption - RoomEncryption(EncryptionEvent), - - /// m.room.guest_access - RoomGuestAccess(GuestAccessEvent), - - /// m.room.history_visibility - RoomHistoryVisibility(HistoryVisibilityEvent), - - /// m.room.join_rules - RoomJoinRules(JoinRulesEvent), - - /// m.room.member - RoomMember(MemberEvent), - - /// m.room.message - RoomMessage(MessageEvent), - - /// m.room.message.feedback - RoomMessageFeedback(FeedbackEvent), - - /// m.room.name - RoomName(NameEvent), - - /// m.room.pinned_events - RoomPinnedEvents(PinnedEventsEvent), - - /// m.room.power_levels - RoomPowerLevels(PowerLevelsEvent), - - /// m.room.redaction - RoomRedaction(RedactionEvent), - - /// m.room.server_acl - RoomServerAcl(ServerAclEvent), - - /// m.room.third_party_invite - RoomThirdPartyInvite(ThirdPartyInviteEvent), - - /// m.room.tombstone - RoomTombstone(TombstoneEvent), - - /// m.room.topic - RoomTopic(TopicEvent), - - /// m.room_key - RoomKey(RoomKeyEvent), - - /// m.room_key_request - RoomKeyRequest(RoomKeyRequestEvent), - - /// m.sticker - Sticker(StickerEvent), - - /// m.tag - Tag(TagEvent), - - /// m.typing - Typing(TypingEvent), - - /// Any basic event that is not part of the specification. - Custom(CustomEvent), - - /// Any room event that is not part of the specification. - CustomRoom(CustomRoomEvent), - - /// Any state event that is not part of the specification. - CustomState(CustomStateEvent), -} - -/// A room event or state event. -#[derive(Clone, Debug, Serialize)] -#[serde(untagged)] -#[allow(clippy::large_enum_variant)] -pub enum RoomEvent { - /// m.call.answer - CallAnswer(AnswerEvent), - - /// m.call.candidates - CallCandidates(CandidatesEvent), - - /// m.call.hangup - CallHangup(HangupEvent), - - /// m.call.invite - CallInvite(InviteEvent), - - /// m.room.aliases - RoomAliases(AliasesEvent), - - /// m.room.avatar - RoomAvatar(AvatarEvent), - - /// m.room.canonical_alias - RoomCanonicalAlias(CanonicalAliasEvent), - - /// m.room.create - RoomCreate(CreateEvent), - - /// m.room.encrypted - RoomEncrypted(EncryptedEvent), - - /// m.room.encryption - RoomEncryption(EncryptionEvent), - - /// m.room.guest_access - RoomGuestAccess(GuestAccessEvent), - - /// m.room.history_visibility - RoomHistoryVisibility(HistoryVisibilityEvent), - - /// m.room.join_rules - RoomJoinRules(JoinRulesEvent), - - /// m.room.member - RoomMember(MemberEvent), - - /// m.room.message - RoomMessage(MessageEvent), - - /// m.room.message.feedback - RoomMessageFeedback(FeedbackEvent), - - /// m.room.name - RoomName(NameEvent), - - /// m.room.pinned_events - RoomPinnedEvents(PinnedEventsEvent), - - /// m.room.power_levels - RoomPowerLevels(PowerLevelsEvent), - - /// m.room.redaction - RoomRedaction(RedactionEvent), - - /// m.room.server_acl - RoomServerAcl(ServerAclEvent), - - /// m.room.third_party_invite - RoomThirdPartyInvite(ThirdPartyInviteEvent), - - /// m.room.tombstone - RoomTombstone(TombstoneEvent), - - /// m.room.topic - RoomTopic(TopicEvent), - - /// m.sticker - Sticker(StickerEvent), - - /// Any room event that is not part of the specification. - CustomRoom(CustomRoomEvent), - - /// Any state event that is not part of the specification. - CustomState(CustomStateEvent), -} - -/// A state event. -#[derive(Clone, Debug, Serialize)] -#[serde(untagged)] -#[allow(clippy::large_enum_variant)] -pub enum StateEvent { - /// m.room.aliases - RoomAliases(AliasesEvent), - - /// m.room.avatar - RoomAvatar(AvatarEvent), - - /// m.room.canonical_alias - RoomCanonicalAlias(CanonicalAliasEvent), - - /// m.room.create - RoomCreate(CreateEvent), - - /// m.room.encryption - RoomEncryption(EncryptionEvent), - - /// m.room.guest_access - RoomGuestAccess(GuestAccessEvent), - - /// m.room.history_visibility - RoomHistoryVisibility(HistoryVisibilityEvent), - - /// m.room.join_rules - RoomJoinRules(JoinRulesEvent), - - /// m.room.member - RoomMember(MemberEvent), - - /// m.room.name - RoomName(NameEvent), - - /// m.room.pinned_events - RoomPinnedEvents(PinnedEventsEvent), - - /// m.room.power_levels - RoomPowerLevels(PowerLevelsEvent), - - /// m.room.server_acl - RoomServerAcl(ServerAclEvent), - - /// m.room.third_party_invite - RoomThirdPartyInvite(ThirdPartyInviteEvent), - - /// m.room.tombstone - RoomTombstone(TombstoneEvent), - - /// m.room.topic - RoomTopic(TopicEvent), - - /// Any state event that is not part of the specification. - CustomState(CustomStateEvent), -} - -impl TryFromRaw for Event { - type Raw = raw::Event; - type Err = String; - - fn try_from_raw(raw: raw::Event) -> Result { - use crate::util::try_convert_variant as conv; - use raw::Event::*; - - match raw { - CallAnswer(c) => conv(Event::CallAnswer, c), - CallCandidates(c) => conv(Event::CallCandidates, c), - CallHangup(c) => conv(Event::CallHangup, c), - CallInvite(c) => conv(Event::CallInvite, c), - Direct(c) => conv(Event::Direct, c), - Dummy(c) => conv(Event::Dummy, c), - ForwardedRoomKey(c) => conv(Event::ForwardedRoomKey, c), - FullyRead(c) => conv(Event::FullyRead, c), - IgnoredUserList(c) => conv(Event::IgnoredUserList, c), - KeyVerificationAccept(c) => conv(Event::KeyVerificationAccept, c), - KeyVerificationCancel(c) => conv(Event::KeyVerificationCancel, c), - KeyVerificationKey(c) => conv(Event::KeyVerificationKey, c), - KeyVerificationMac(c) => conv(Event::KeyVerificationMac, c), - KeyVerificationRequest(c) => conv(Event::KeyVerificationRequest, c), - KeyVerificationStart(c) => conv(Event::KeyVerificationStart, c), - Presence(c) => conv(Event::Presence, c), - PushRules(c) => conv(Event::PushRules, c), - Receipt(c) => conv(Event::Receipt, c), - RoomAliases(c) => conv(Event::RoomAliases, c), - RoomAvatar(c) => conv(Event::RoomAvatar, c), - RoomCanonicalAlias(c) => conv(Event::RoomCanonicalAlias, c), - RoomCreate(c) => conv(Event::RoomCreate, c), - RoomEncrypted(c) => conv(Event::RoomEncrypted, c), - RoomEncryption(c) => conv(Event::RoomEncryption, c), - RoomGuestAccess(c) => conv(Event::RoomGuestAccess, c), - RoomHistoryVisibility(c) => conv(Event::RoomHistoryVisibility, c), - RoomJoinRules(c) => conv(Event::RoomJoinRules, c), - RoomMember(c) => conv(Event::RoomMember, c), - RoomMessage(c) => conv(Event::RoomMessage, c), - RoomMessageFeedback(c) => conv(Event::RoomMessageFeedback, c), - RoomName(c) => conv(Event::RoomName, c), - RoomPinnedEvents(c) => conv(Event::RoomPinnedEvents, c), - RoomPowerLevels(c) => conv(Event::RoomPowerLevels, c), - RoomRedaction(c) => conv(Event::RoomRedaction, c), - RoomServerAcl(c) => conv(Event::RoomServerAcl, c), - RoomThirdPartyInvite(c) => conv(Event::RoomThirdPartyInvite, c), - RoomTombstone(c) => conv(Event::RoomTombstone, c), - RoomTopic(c) => conv(Event::RoomTopic, c), - RoomKey(c) => conv(Event::RoomKey, c), - RoomKeyRequest(c) => conv(Event::RoomKeyRequest, c), - Sticker(c) => conv(Event::Sticker, c), - Tag(c) => conv(Event::Tag, c), - Typing(c) => conv(Event::Typing, c), - Custom(c) => conv(Event::Custom, c), - CustomRoom(c) => conv(Event::CustomRoom, c), - CustomState(c) => conv(Event::CustomState, c), - } - } -} - -impl TryFromRaw for RoomEvent { - type Raw = raw::RoomEvent; - type Err = String; - - fn try_from_raw(raw: raw::RoomEvent) -> Result { - use crate::util::try_convert_variant as conv; - use raw::RoomEvent::*; - - match raw { - CallAnswer(c) => conv(RoomEvent::CallAnswer, c), - CallCandidates(c) => conv(RoomEvent::CallCandidates, c), - CallHangup(c) => conv(RoomEvent::CallHangup, c), - CallInvite(c) => conv(RoomEvent::CallInvite, c), - RoomAliases(c) => conv(RoomEvent::RoomAliases, c), - RoomAvatar(c) => conv(RoomEvent::RoomAvatar, c), - RoomCanonicalAlias(c) => conv(RoomEvent::RoomCanonicalAlias, c), - RoomCreate(c) => conv(RoomEvent::RoomCreate, c), - RoomEncrypted(c) => conv(RoomEvent::RoomEncrypted, c), - RoomEncryption(c) => conv(RoomEvent::RoomEncryption, c), - RoomGuestAccess(c) => conv(RoomEvent::RoomGuestAccess, c), - RoomHistoryVisibility(c) => conv(RoomEvent::RoomHistoryVisibility, c), - RoomJoinRules(c) => conv(RoomEvent::RoomJoinRules, c), - RoomMember(c) => conv(RoomEvent::RoomMember, c), - RoomMessage(c) => conv(RoomEvent::RoomMessage, c), - RoomMessageFeedback(c) => conv(RoomEvent::RoomMessageFeedback, c), - RoomName(c) => conv(RoomEvent::RoomName, c), - RoomPinnedEvents(c) => conv(RoomEvent::RoomPinnedEvents, c), - RoomPowerLevels(c) => conv(RoomEvent::RoomPowerLevels, c), - RoomRedaction(c) => conv(RoomEvent::RoomRedaction, c), - RoomServerAcl(c) => conv(RoomEvent::RoomServerAcl, c), - RoomThirdPartyInvite(c) => conv(RoomEvent::RoomThirdPartyInvite, c), - RoomTombstone(c) => conv(RoomEvent::RoomTombstone, c), - RoomTopic(c) => conv(RoomEvent::RoomTopic, c), - Sticker(c) => conv(RoomEvent::Sticker, c), - CustomRoom(c) => conv(RoomEvent::CustomRoom, c), - CustomState(c) => conv(RoomEvent::CustomState, c), - } - } -} - -impl TryFromRaw for StateEvent { - type Raw = raw::StateEvent; - type Err = String; - - fn try_from_raw(raw: raw::StateEvent) -> Result { - use crate::util::try_convert_variant as conv; - use raw::StateEvent::*; - - match raw { - RoomAliases(c) => conv(StateEvent::RoomAliases, c), - RoomAvatar(c) => conv(StateEvent::RoomAvatar, c), - RoomCanonicalAlias(c) => conv(StateEvent::RoomCanonicalAlias, c), - RoomCreate(c) => conv(StateEvent::RoomCreate, c), - RoomEncryption(c) => conv(StateEvent::RoomEncryption, c), - RoomGuestAccess(c) => conv(StateEvent::RoomGuestAccess, c), - RoomHistoryVisibility(c) => conv(StateEvent::RoomHistoryVisibility, c), - RoomJoinRules(c) => conv(StateEvent::RoomJoinRules, c), - RoomMember(c) => conv(StateEvent::RoomMember, c), - RoomName(c) => conv(StateEvent::RoomName, c), - RoomPinnedEvents(c) => conv(StateEvent::RoomPinnedEvents, c), - RoomPowerLevels(c) => conv(StateEvent::RoomPowerLevels, c), - RoomServerAcl(c) => conv(StateEvent::RoomServerAcl, c), - RoomThirdPartyInvite(c) => conv(StateEvent::RoomThirdPartyInvite, c), - RoomTombstone(c) => conv(StateEvent::RoomTombstone, c), - RoomTopic(c) => conv(StateEvent::RoomTopic, c), - CustomState(c) => conv(StateEvent::CustomState, c), - } - } -} - -impl_from_for_enum!(Event, AnswerEvent, CallAnswer); -impl_from_for_enum!(Event, CandidatesEvent, CallCandidates); -impl_from_for_enum!(Event, HangupEvent, CallHangup); -impl_from_for_enum!(Event, InviteEvent, CallInvite); -impl_from_for_enum!(Event, DirectEvent, Direct); -impl_from_for_enum!(Event, DummyEvent, Dummy); -impl_from_for_enum!(Event, ForwardedRoomKeyEvent, ForwardedRoomKey); -impl_from_for_enum!(Event, FullyReadEvent, FullyRead); -impl_from_for_enum!(Event, AcceptEvent, KeyVerificationAccept); -impl_from_for_enum!(Event, CancelEvent, KeyVerificationCancel); -impl_from_for_enum!(Event, KeyEvent, KeyVerificationKey); -impl_from_for_enum!(Event, MacEvent, KeyVerificationMac); -impl_from_for_enum!(Event, RequestEvent, KeyVerificationRequest); -impl_from_for_enum!(Event, StartEvent, KeyVerificationStart); -impl_from_for_enum!(Event, IgnoredUserListEvent, IgnoredUserList); -impl_from_for_enum!(Event, PresenceEvent, Presence); -impl_from_for_enum!(Event, PushRulesEvent, PushRules); -impl_from_for_enum!(Event, ReceiptEvent, Receipt); -impl_from_for_enum!(Event, AliasesEvent, RoomAliases); -impl_from_for_enum!(Event, AvatarEvent, RoomAvatar); -impl_from_for_enum!(Event, CanonicalAliasEvent, RoomCanonicalAlias); -impl_from_for_enum!(Event, CreateEvent, RoomCreate); -impl_from_for_enum!(Event, EncryptedEvent, RoomEncrypted); -impl_from_for_enum!(Event, EncryptionEvent, RoomEncryption); -impl_from_for_enum!(Event, GuestAccessEvent, RoomGuestAccess); -impl_from_for_enum!(Event, HistoryVisibilityEvent, RoomHistoryVisibility); -impl_from_for_enum!(Event, JoinRulesEvent, RoomJoinRules); -impl_from_for_enum!(Event, MemberEvent, RoomMember); -impl_from_for_enum!(Event, MessageEvent, RoomMessage); -impl_from_for_enum!(Event, FeedbackEvent, RoomMessageFeedback); -impl_from_for_enum!(Event, NameEvent, RoomName); -impl_from_for_enum!(Event, PinnedEventsEvent, RoomPinnedEvents); -impl_from_for_enum!(Event, PowerLevelsEvent, RoomPowerLevels); -impl_from_for_enum!(Event, RedactionEvent, RoomRedaction); -impl_from_for_enum!(Event, ServerAclEvent, RoomServerAcl); -impl_from_for_enum!(Event, ThirdPartyInviteEvent, RoomThirdPartyInvite); -impl_from_for_enum!(Event, TombstoneEvent, RoomTombstone); -impl_from_for_enum!(Event, TopicEvent, RoomTopic); -impl_from_for_enum!(Event, RoomKeyEvent, RoomKey); -impl_from_for_enum!(Event, RoomKeyRequestEvent, RoomKeyRequest); -impl_from_for_enum!(Event, StickerEvent, Sticker); -impl_from_for_enum!(Event, TagEvent, Tag); -impl_from_for_enum!(Event, TypingEvent, Typing); -impl_from_for_enum!(Event, CustomEvent, Custom); -impl_from_for_enum!(Event, CustomRoomEvent, CustomRoom); -impl_from_for_enum!(Event, CustomStateEvent, CustomState); - -impl_from_for_enum!(RoomEvent, AnswerEvent, CallAnswer); -impl_from_for_enum!(RoomEvent, CandidatesEvent, CallCandidates); -impl_from_for_enum!(RoomEvent, HangupEvent, CallHangup); -impl_from_for_enum!(RoomEvent, InviteEvent, CallInvite); -impl_from_for_enum!(RoomEvent, AliasesEvent, RoomAliases); -impl_from_for_enum!(RoomEvent, AvatarEvent, RoomAvatar); -impl_from_for_enum!(RoomEvent, CanonicalAliasEvent, RoomCanonicalAlias); -impl_from_for_enum!(RoomEvent, CreateEvent, RoomCreate); -impl_from_for_enum!(RoomEvent, EncryptedEvent, RoomEncrypted); -impl_from_for_enum!(RoomEvent, EncryptionEvent, RoomEncryption); -impl_from_for_enum!(RoomEvent, GuestAccessEvent, RoomGuestAccess); -impl_from_for_enum!(RoomEvent, HistoryVisibilityEvent, RoomHistoryVisibility); -impl_from_for_enum!(RoomEvent, JoinRulesEvent, RoomJoinRules); -impl_from_for_enum!(RoomEvent, MemberEvent, RoomMember); -impl_from_for_enum!(RoomEvent, MessageEvent, RoomMessage); -impl_from_for_enum!(RoomEvent, FeedbackEvent, RoomMessageFeedback); -impl_from_for_enum!(RoomEvent, NameEvent, RoomName); -impl_from_for_enum!(RoomEvent, PinnedEventsEvent, RoomPinnedEvents); -impl_from_for_enum!(RoomEvent, PowerLevelsEvent, RoomPowerLevels); -impl_from_for_enum!(RoomEvent, RedactionEvent, RoomRedaction); -impl_from_for_enum!(RoomEvent, ServerAclEvent, RoomServerAcl); -impl_from_for_enum!(RoomEvent, StickerEvent, Sticker); -impl_from_for_enum!(RoomEvent, ThirdPartyInviteEvent, RoomThirdPartyInvite); -impl_from_for_enum!(RoomEvent, TombstoneEvent, RoomTombstone); -impl_from_for_enum!(RoomEvent, TopicEvent, RoomTopic); -impl_from_for_enum!(RoomEvent, CustomRoomEvent, CustomRoom); -impl_from_for_enum!(RoomEvent, CustomStateEvent, CustomState); - -impl_from_for_enum!(StateEvent, AliasesEvent, RoomAliases); -impl_from_for_enum!(StateEvent, AvatarEvent, RoomAvatar); -impl_from_for_enum!(StateEvent, CanonicalAliasEvent, RoomCanonicalAlias); -impl_from_for_enum!(StateEvent, CreateEvent, RoomCreate); -impl_from_for_enum!(StateEvent, EncryptionEvent, RoomEncryption); -impl_from_for_enum!(StateEvent, GuestAccessEvent, RoomGuestAccess); -impl_from_for_enum!(StateEvent, HistoryVisibilityEvent, RoomHistoryVisibility); -impl_from_for_enum!(StateEvent, JoinRulesEvent, RoomJoinRules); -impl_from_for_enum!(StateEvent, MemberEvent, RoomMember); -impl_from_for_enum!(StateEvent, NameEvent, RoomName); -impl_from_for_enum!(StateEvent, PinnedEventsEvent, RoomPinnedEvents); -impl_from_for_enum!(StateEvent, PowerLevelsEvent, RoomPowerLevels); -impl_from_for_enum!(StateEvent, ServerAclEvent, RoomServerAcl); -impl_from_for_enum!(StateEvent, ThirdPartyInviteEvent, RoomThirdPartyInvite); -impl_from_for_enum!(StateEvent, TombstoneEvent, RoomTombstone); -impl_from_for_enum!(StateEvent, TopicEvent, RoomTopic); -impl_from_for_enum!(StateEvent, CustomStateEvent, CustomState); diff --git a/src/collections/only.rs b/src/collections/only.rs deleted file mode 100644 index 1be19415..00000000 --- a/src/collections/only.rs +++ /dev/null @@ -1,218 +0,0 @@ -//! Enums for heterogeneous collections of events, exclusive to event types that implement "at -//! most" the trait of the same name. - -use serde::Serialize; - -pub use super::all::StateEvent; -use super::raw::only as raw; -use crate::{ - call::{ - answer::AnswerEvent, candidates::CandidatesEvent, hangup::HangupEvent, invite::InviteEvent, - }, - direct::DirectEvent, - dummy::DummyEvent, - forwarded_room_key::ForwardedRoomKeyEvent, - fully_read::FullyReadEvent, - ignored_user_list::IgnoredUserListEvent, - key::verification::{ - accept::AcceptEvent, cancel::CancelEvent, key::KeyEvent, mac::MacEvent, - request::RequestEvent, start::StartEvent, - }, - presence::PresenceEvent, - push_rules::PushRulesEvent, - receipt::ReceiptEvent, - room::{ - encrypted::EncryptedEvent, - message::{feedback::FeedbackEvent, MessageEvent}, - redaction::RedactionEvent, - }, - room_key::RoomKeyEvent, - room_key_request::RoomKeyRequestEvent, - sticker::StickerEvent, - tag::TagEvent, - typing::TypingEvent, - CustomEvent, CustomRoomEvent, TryFromRaw, -}; - -/// A basic event. -#[derive(Clone, Debug, Serialize)] -#[serde(untagged)] -#[allow(clippy::large_enum_variant)] -pub enum Event { - /// m.direct - Direct(DirectEvent), - - /// m.dummy - Dummy(DummyEvent), - - /// m.forwarded_room_key - ForwardedRoomKey(ForwardedRoomKeyEvent), - - /// m.fully_read - FullyRead(FullyReadEvent), - - /// m.key.verification.accept - KeyVerificationAccept(AcceptEvent), - - /// m.key.verification.cancel - KeyVerificationCancel(CancelEvent), - - /// m.key.verification.key - KeyVerificationKey(KeyEvent), - - /// m.key.verification.mac - KeyVerificationMac(MacEvent), - - /// m.key.verification.request - KeyVerificationRequest(RequestEvent), - - /// m.key.verification.start - KeyVerificationStart(StartEvent), - - /// m.ignored_user_list - IgnoredUserList(IgnoredUserListEvent), - - /// m.presence - Presence(PresenceEvent), - - /// m.push_rules - PushRules(PushRulesEvent), - - /// m.room_key - RoomKey(RoomKeyEvent), - - /// m.room_key_request - RoomKeyRequest(RoomKeyRequestEvent), - - /// m.receipt - Receipt(ReceiptEvent), - - /// m.tag - Tag(TagEvent), - - /// m.typing - Typing(TypingEvent), - - /// Any basic event that is not part of the specification. - Custom(CustomEvent), -} - -/// A room event. -#[derive(Clone, Debug, Serialize)] -#[serde(untagged)] -#[allow(clippy::large_enum_variant)] -pub enum RoomEvent { - /// m.call.answer - CallAnswer(AnswerEvent), - - /// m.call.candidates - CallCandidates(CandidatesEvent), - - /// m.call.hangup - CallHangup(HangupEvent), - - /// m.call.invite - CallInvite(InviteEvent), - - /// m.room.encrypted - RoomEncrypted(EncryptedEvent), - - /// m.room.message - RoomMessage(MessageEvent), - - /// m.room.message.feedback - RoomMessageFeedback(FeedbackEvent), - - /// m.room.redaction - RoomRedaction(RedactionEvent), - - /// m.sticker - Sticker(StickerEvent), - - /// Any room event that is not part of the specification. - CustomRoom(CustomRoomEvent), -} - -impl TryFromRaw for Event { - type Raw = raw::Event; - type Err = String; - - fn try_from_raw(raw: raw::Event) -> Result { - use crate::util::try_convert_variant as conv; - use raw::Event::*; - - match raw { - Direct(c) => conv(Event::Direct, c), - Dummy(c) => conv(Event::Dummy, c), - ForwardedRoomKey(c) => conv(Event::ForwardedRoomKey, c), - FullyRead(c) => conv(Event::FullyRead, c), - KeyVerificationAccept(c) => conv(Event::KeyVerificationAccept, c), - KeyVerificationCancel(c) => conv(Event::KeyVerificationCancel, c), - KeyVerificationKey(c) => conv(Event::KeyVerificationKey, c), - KeyVerificationMac(c) => conv(Event::KeyVerificationMac, c), - KeyVerificationRequest(c) => conv(Event::KeyVerificationRequest, c), - KeyVerificationStart(c) => conv(Event::KeyVerificationStart, c), - IgnoredUserList(c) => conv(Event::IgnoredUserList, c), - Presence(c) => conv(Event::Presence, c), - PushRules(c) => conv(Event::PushRules, c), - RoomKey(c) => conv(Event::RoomKey, c), - RoomKeyRequest(c) => conv(Event::RoomKeyRequest, c), - Receipt(c) => conv(Event::Receipt, c), - Tag(c) => conv(Event::Tag, c), - Typing(c) => conv(Event::Typing, c), - Custom(c) => conv(Event::Custom, c), - } - } -} - -impl TryFromRaw for RoomEvent { - type Raw = raw::RoomEvent; - type Err = String; - - fn try_from_raw(raw: raw::RoomEvent) -> Result { - use crate::util::try_convert_variant as conv; - use raw::RoomEvent::*; - - match raw { - CallAnswer(c) => conv(RoomEvent::CallAnswer, c), - CallCandidates(c) => conv(RoomEvent::CallCandidates, c), - CallHangup(c) => conv(RoomEvent::CallHangup, c), - CallInvite(c) => conv(RoomEvent::CallInvite, c), - RoomEncrypted(c) => conv(RoomEvent::RoomEncrypted, c), - RoomMessage(c) => conv(RoomEvent::RoomMessage, c), - RoomMessageFeedback(c) => conv(RoomEvent::RoomMessageFeedback, c), - RoomRedaction(c) => conv(RoomEvent::RoomRedaction, c), - Sticker(c) => conv(RoomEvent::Sticker, c), - CustomRoom(c) => conv(RoomEvent::CustomRoom, c), - } - } -} - -impl_from_for_enum!(Event, DirectEvent, Direct); -impl_from_for_enum!(Event, DummyEvent, Dummy); -impl_from_for_enum!(Event, ForwardedRoomKeyEvent, ForwardedRoomKey); -impl_from_for_enum!(Event, FullyReadEvent, FullyRead); -impl_from_for_enum!(Event, AcceptEvent, KeyVerificationAccept); -impl_from_for_enum!(Event, CancelEvent, KeyVerificationCancel); -impl_from_for_enum!(Event, KeyEvent, KeyVerificationKey); -impl_from_for_enum!(Event, MacEvent, KeyVerificationMac); -impl_from_for_enum!(Event, RequestEvent, KeyVerificationRequest); -impl_from_for_enum!(Event, StartEvent, KeyVerificationStart); -impl_from_for_enum!(Event, IgnoredUserListEvent, IgnoredUserList); -impl_from_for_enum!(Event, PresenceEvent, Presence); -impl_from_for_enum!(Event, PushRulesEvent, PushRules); -impl_from_for_enum!(Event, ReceiptEvent, Receipt); -impl_from_for_enum!(Event, TagEvent, Tag); -impl_from_for_enum!(Event, TypingEvent, Typing); -impl_from_for_enum!(Event, CustomEvent, Custom); - -impl_from_for_enum!(RoomEvent, AnswerEvent, CallAnswer); -impl_from_for_enum!(RoomEvent, CandidatesEvent, CallCandidates); -impl_from_for_enum!(RoomEvent, HangupEvent, CallHangup); -impl_from_for_enum!(RoomEvent, InviteEvent, CallInvite); -impl_from_for_enum!(RoomEvent, EncryptedEvent, RoomEncrypted); -impl_from_for_enum!(RoomEvent, MessageEvent, RoomMessage); -impl_from_for_enum!(RoomEvent, FeedbackEvent, RoomMessageFeedback); -impl_from_for_enum!(RoomEvent, RedactionEvent, RoomRedaction); -impl_from_for_enum!(RoomEvent, StickerEvent, Sticker); -impl_from_for_enum!(RoomEvent, CustomRoomEvent, CustomRoom); diff --git a/src/collections/raw/all.rs b/src/collections/raw/all.rs deleted file mode 100644 index b0bf3d98..00000000 --- a/src/collections/raw/all.rs +++ /dev/null @@ -1,651 +0,0 @@ -//! Enums for heterogeneous collections of events, inclusive for every event type that implements -//! the trait of the same name. - -use serde::{de::Error as _, Deserialize, Deserializer}; -use serde_json::Value as JsonValue; - -use super::only; -use crate::{ - call::{ - answer::raw::AnswerEvent, candidates::raw::CandidatesEvent, hangup::raw::HangupEvent, - invite::raw::InviteEvent, - }, - custom::raw::{CustomEvent, CustomRoomEvent, CustomStateEvent}, - direct::raw::DirectEvent, - dummy::raw::DummyEvent, - forwarded_room_key::raw::ForwardedRoomKeyEvent, - fully_read::raw::FullyReadEvent, - ignored_user_list::raw::IgnoredUserListEvent, - key::verification::{ - accept::raw::AcceptEvent, cancel::raw::CancelEvent, key::raw::KeyEvent, mac::raw::MacEvent, - request::raw::RequestEvent, start::raw::StartEvent, - }, - presence::raw::PresenceEvent, - push_rules::raw::PushRulesEvent, - receipt::raw::ReceiptEvent, - room::{ - aliases::raw::AliasesEvent, - avatar::raw::AvatarEvent, - canonical_alias::raw::CanonicalAliasEvent, - create::raw::CreateEvent, - encrypted::raw::EncryptedEvent, - encryption::raw::EncryptionEvent, - guest_access::raw::GuestAccessEvent, - history_visibility::raw::HistoryVisibilityEvent, - join_rules::raw::JoinRulesEvent, - member::raw::MemberEvent, - message::{feedback::raw::FeedbackEvent, raw::MessageEvent}, - name::raw::NameEvent, - pinned_events::raw::PinnedEventsEvent, - power_levels::raw::PowerLevelsEvent, - redaction::raw::RedactionEvent, - server_acl::raw::ServerAclEvent, - third_party_invite::raw::ThirdPartyInviteEvent, - tombstone::raw::TombstoneEvent, - topic::raw::TopicEvent, - }, - room_key::raw::RoomKeyEvent, - room_key_request::raw::RoomKeyRequestEvent, - sticker::raw::StickerEvent, - tag::raw::TagEvent, - typing::raw::TypingEvent, - util::get_field, - EventType, -}; - -/// A basic event, room event, or state event. -#[derive(Clone, Debug)] -#[allow(clippy::large_enum_variant)] -pub enum Event { - /// m.call.answer - CallAnswer(AnswerEvent), - - /// m.call.candidates - CallCandidates(CandidatesEvent), - - /// m.call.hangup - CallHangup(HangupEvent), - - /// m.call.invite - CallInvite(InviteEvent), - - /// m.direct - Direct(DirectEvent), - - /// m.dummy - Dummy(DummyEvent), - - /// m.forwarded_room_key - ForwardedRoomKey(ForwardedRoomKeyEvent), - - /// m.fully_read - FullyRead(FullyReadEvent), - - /// m.ignored_user_list - IgnoredUserList(IgnoredUserListEvent), - - /// m.key.verification.accept - KeyVerificationAccept(AcceptEvent), - - /// m.key.verification.cancel - KeyVerificationCancel(CancelEvent), - - /// m.key.verification.key - KeyVerificationKey(KeyEvent), - - /// m.key.verification.mac - KeyVerificationMac(MacEvent), - - /// m.key.verification.request - KeyVerificationRequest(RequestEvent), - - /// m.key.verification.start - KeyVerificationStart(StartEvent), - - /// m.presence - Presence(PresenceEvent), - - /// m.push_rules - PushRules(PushRulesEvent), - - /// m.receipt - Receipt(ReceiptEvent), - - /// m.room.aliases - RoomAliases(AliasesEvent), - - /// m.room.avatar - RoomAvatar(AvatarEvent), - - /// m.room.canonical_alias - RoomCanonicalAlias(CanonicalAliasEvent), - - /// m.room.create - RoomCreate(CreateEvent), - - /// m.room.encrypted - RoomEncrypted(EncryptedEvent), - - /// m.room.encryption - RoomEncryption(EncryptionEvent), - - /// m.room.guest_access - RoomGuestAccess(GuestAccessEvent), - - /// m.room.history_visibility - RoomHistoryVisibility(HistoryVisibilityEvent), - - /// m.room.join_rules - RoomJoinRules(JoinRulesEvent), - - /// m.room.member - RoomMember(MemberEvent), - - /// m.room.message - RoomMessage(MessageEvent), - - /// m.room.message.feedback - RoomMessageFeedback(FeedbackEvent), - - /// m.room.name - RoomName(NameEvent), - - /// m.room.pinned_events - RoomPinnedEvents(PinnedEventsEvent), - - /// m.room.power_levels - RoomPowerLevels(PowerLevelsEvent), - - /// m.room.redaction - RoomRedaction(RedactionEvent), - - /// m.room.server_acl - RoomServerAcl(ServerAclEvent), - - /// m.room.third_party_invite - RoomThirdPartyInvite(ThirdPartyInviteEvent), - - /// m.room.tombstone - RoomTombstone(TombstoneEvent), - - /// m.room.topic - RoomTopic(TopicEvent), - - /// m.room_key - RoomKey(RoomKeyEvent), - - /// m.room_key_request - RoomKeyRequest(RoomKeyRequestEvent), - - /// m.sticker - Sticker(StickerEvent), - - /// m.tag - Tag(TagEvent), - - /// m.typing - Typing(TypingEvent), - - /// Any basic event that is not part of the specification. - Custom(CustomEvent), - - /// Any room event that is not part of the specification. - CustomRoom(CustomRoomEvent), - - /// Any state event that is not part of the specification. - CustomState(CustomStateEvent), -} - -/// A room event or state event. -#[derive(Clone, Debug)] -#[allow(clippy::large_enum_variant)] -pub enum RoomEvent { - /// m.call.answer - CallAnswer(AnswerEvent), - - /// m.call.candidates - CallCandidates(CandidatesEvent), - - /// m.call.hangup - CallHangup(HangupEvent), - - /// m.call.invite - CallInvite(InviteEvent), - - /// m.room.aliases - RoomAliases(AliasesEvent), - - /// m.room.avatar - RoomAvatar(AvatarEvent), - - /// m.room.canonical_alias - RoomCanonicalAlias(CanonicalAliasEvent), - - /// m.room.create - RoomCreate(CreateEvent), - - /// m.room.encrypted - RoomEncrypted(EncryptedEvent), - - /// m.room.encryption - RoomEncryption(EncryptionEvent), - - /// m.room.guest_access - RoomGuestAccess(GuestAccessEvent), - - /// m.room.history_visibility - RoomHistoryVisibility(HistoryVisibilityEvent), - - /// m.room.join_rules - RoomJoinRules(JoinRulesEvent), - - /// m.room.member - RoomMember(MemberEvent), - - /// m.room.message - RoomMessage(MessageEvent), - - /// m.room.message.feedback - RoomMessageFeedback(FeedbackEvent), - - /// m.room.name - RoomName(NameEvent), - - /// m.room.pinned_events - RoomPinnedEvents(PinnedEventsEvent), - - /// m.room.power_levels - RoomPowerLevels(PowerLevelsEvent), - - /// m.room.redaction - RoomRedaction(RedactionEvent), - - /// m.room.server_acl - RoomServerAcl(ServerAclEvent), - - /// m.room.third_party_invite - RoomThirdPartyInvite(ThirdPartyInviteEvent), - - /// m.room.tombstone - RoomTombstone(TombstoneEvent), - - /// m.room.topic - RoomTopic(TopicEvent), - - /// m.sticker - Sticker(StickerEvent), - - /// Any room event that is not part of the specification. - CustomRoom(CustomRoomEvent), - - /// Any state event that is not part of the specification. - CustomState(CustomStateEvent), -} - -/// A state event. -#[derive(Clone, Debug)] -#[allow(clippy::large_enum_variant)] -pub enum StateEvent { - /// m.room.aliases - RoomAliases(AliasesEvent), - - /// m.room.avatar - RoomAvatar(AvatarEvent), - - /// m.room.canonical_alias - RoomCanonicalAlias(CanonicalAliasEvent), - - /// m.room.create - RoomCreate(CreateEvent), - - /// m.room.encryption - RoomEncryption(EncryptionEvent), - - /// m.room.guest_access - RoomGuestAccess(GuestAccessEvent), - - /// m.room.history_visibility - RoomHistoryVisibility(HistoryVisibilityEvent), - - /// m.room.join_rules - RoomJoinRules(JoinRulesEvent), - - /// m.room.member - RoomMember(MemberEvent), - - /// m.room.name - RoomName(NameEvent), - - /// m.room.pinned_events - RoomPinnedEvents(PinnedEventsEvent), - - /// m.room.power_levels - RoomPowerLevels(PowerLevelsEvent), - - /// m.room.server_acl - RoomServerAcl(ServerAclEvent), - - /// m.room.third_party_invite - RoomThirdPartyInvite(ThirdPartyInviteEvent), - - /// m.room.tombstone - RoomTombstone(TombstoneEvent), - - /// m.room.topic - RoomTopic(TopicEvent), - - /// Any state event that is not part of the specification. - CustomState(CustomStateEvent), -} - -impl<'de> Deserialize<'de> for Event { - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - use crate::util::try_variant_from_value as from_value; - use EventType::*; - - let value = JsonValue::deserialize(deserializer)?; - let event_type = get_field(&value, "type")?; - - match event_type { - CallAnswer => from_value(value, Event::CallAnswer), - CallCandidates => from_value(value, Event::CallCandidates), - CallHangup => from_value(value, Event::CallHangup), - CallInvite => from_value(value, Event::CallInvite), - Direct => from_value(value, Event::Direct), - Dummy => from_value(value, Event::Dummy), - ForwardedRoomKey => from_value(value, Event::ForwardedRoomKey), - FullyRead => from_value(value, Event::FullyRead), - IgnoredUserList => from_value(value, Event::IgnoredUserList), - KeyVerificationAccept => from_value(value, Event::KeyVerificationAccept), - KeyVerificationCancel => from_value(value, Event::KeyVerificationCancel), - KeyVerificationKey => from_value(value, Event::KeyVerificationKey), - KeyVerificationMac => from_value(value, Event::KeyVerificationMac), - KeyVerificationRequest => from_value(value, Event::KeyVerificationRequest), - KeyVerificationStart => from_value(value, Event::KeyVerificationStart), - Presence => from_value(value, Event::Presence), - PushRules => from_value(value, Event::PushRules), - Receipt => from_value(value, Event::Receipt), - RoomAliases => from_value(value, Event::RoomAliases), - RoomAvatar => from_value(value, Event::RoomAvatar), - RoomCanonicalAlias => from_value(value, Event::RoomCanonicalAlias), - RoomCreate => from_value(value, Event::RoomCreate), - RoomEncrypted => from_value(value, Event::RoomEncrypted), - RoomEncryption => from_value(value, Event::RoomEncryption), - RoomGuestAccess => from_value(value, Event::RoomGuestAccess), - RoomHistoryVisibility => from_value(value, Event::RoomHistoryVisibility), - RoomJoinRules => from_value(value, Event::RoomJoinRules), - RoomMember => from_value(value, Event::RoomMember), - RoomMessage => from_value(value, Event::RoomMessage), - RoomMessageFeedback => from_value(value, Event::RoomMessageFeedback), - RoomName => from_value(value, Event::RoomName), - RoomPinnedEvents => from_value(value, Event::RoomPinnedEvents), - RoomPowerLevels => from_value(value, Event::RoomPowerLevels), - RoomRedaction => from_value(value, Event::RoomRedaction), - RoomServerAcl => from_value(value, Event::RoomServerAcl), - RoomThirdPartyInvite => from_value(value, Event::RoomThirdPartyInvite), - RoomTombstone => from_value(value, Event::RoomTombstone), - RoomTopic => from_value(value, Event::RoomTopic), - RoomKey => from_value(value, Event::RoomKey), - RoomKeyRequest => from_value(value, Event::RoomKeyRequest), - Sticker => from_value(value, Event::Sticker), - Tag => from_value(value, Event::Tag), - Typing => from_value(value, Event::Typing), - Custom(_event_type_name) => { - if value.get("state_key").is_some() { - from_value(value, Event::CustomState) - } else if value.get("event_id").is_some() - && value.get("room_id").is_some() - && value.get("sender").is_some() - { - from_value(value, Event::CustomRoom) - } else { - from_value(value, Event::Custom) - } - } - } - } -} - -impl<'de> Deserialize<'de> for RoomEvent { - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - use crate::util::try_variant_from_value as from_value; - use EventType::*; - - let value = JsonValue::deserialize(deserializer)?; - let event_type = get_field(&value, "type")?; - - match event_type { - CallAnswer => from_value(value, RoomEvent::CallAnswer), - CallCandidates => from_value(value, RoomEvent::CallCandidates), - CallHangup => from_value(value, RoomEvent::CallHangup), - CallInvite => from_value(value, RoomEvent::CallInvite), - RoomAliases => from_value(value, RoomEvent::RoomAliases), - RoomAvatar => from_value(value, RoomEvent::RoomAvatar), - RoomCanonicalAlias => from_value(value, RoomEvent::RoomCanonicalAlias), - RoomCreate => from_value(value, RoomEvent::RoomCreate), - RoomEncrypted => from_value(value, RoomEvent::RoomEncrypted), - RoomEncryption => from_value(value, RoomEvent::RoomEncryption), - RoomGuestAccess => from_value(value, RoomEvent::RoomGuestAccess), - RoomHistoryVisibility => from_value(value, RoomEvent::RoomHistoryVisibility), - RoomJoinRules => from_value(value, RoomEvent::RoomJoinRules), - RoomMember => from_value(value, RoomEvent::RoomMember), - RoomMessage => from_value(value, RoomEvent::RoomMessage), - RoomMessageFeedback => from_value(value, RoomEvent::RoomMessageFeedback), - RoomName => from_value(value, RoomEvent::RoomName), - RoomPinnedEvents => from_value(value, RoomEvent::RoomPinnedEvents), - RoomPowerLevels => from_value(value, RoomEvent::RoomPowerLevels), - RoomRedaction => from_value(value, RoomEvent::RoomRedaction), - RoomServerAcl => from_value(value, RoomEvent::RoomServerAcl), - RoomThirdPartyInvite => from_value(value, RoomEvent::RoomThirdPartyInvite), - RoomTombstone => from_value(value, RoomEvent::RoomTombstone), - RoomTopic => from_value(value, RoomEvent::RoomTopic), - Sticker => from_value(value, RoomEvent::Sticker), - Custom(_event_type_name) => { - if value.get("state_key").is_some() { - from_value(value, RoomEvent::CustomState) - } else { - from_value(value, RoomEvent::CustomRoom) - } - } - Direct - | Dummy - | ForwardedRoomKey - | FullyRead - | IgnoredUserList - | KeyVerificationAccept - | KeyVerificationCancel - | KeyVerificationKey - | KeyVerificationMac - | KeyVerificationRequest - | KeyVerificationStart - | Presence - | PushRules - | Receipt - | RoomKey - | RoomKeyRequest - | Tag - | Typing => Err(D::Error::custom("invalid event type")), - } - } -} - -impl<'de> Deserialize<'de> for StateEvent { - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - use crate::util::try_variant_from_value as from_value; - use EventType::*; - - let value = JsonValue::deserialize(deserializer)?; - let event_type = get_field(&value, "type")?; - - match event_type { - RoomAliases => from_value(value, StateEvent::RoomAliases), - RoomAvatar => from_value(value, StateEvent::RoomAvatar), - RoomCanonicalAlias => from_value(value, StateEvent::RoomCanonicalAlias), - RoomCreate => from_value(value, StateEvent::RoomCreate), - RoomEncryption => from_value(value, StateEvent::RoomEncryption), - RoomGuestAccess => from_value(value, StateEvent::RoomGuestAccess), - RoomHistoryVisibility => from_value(value, StateEvent::RoomHistoryVisibility), - RoomJoinRules => from_value(value, StateEvent::RoomJoinRules), - RoomMember => from_value(value, StateEvent::RoomMember), - RoomName => from_value(value, StateEvent::RoomName), - RoomPinnedEvents => from_value(value, StateEvent::RoomPinnedEvents), - RoomPowerLevels => from_value(value, StateEvent::RoomPowerLevels), - RoomServerAcl => from_value(value, StateEvent::RoomServerAcl), - RoomThirdPartyInvite => from_value(value, StateEvent::RoomThirdPartyInvite), - RoomTombstone => from_value(value, StateEvent::RoomTombstone), - RoomTopic => from_value(value, StateEvent::RoomTopic), - Custom(_event_type_name) => from_value(value, StateEvent::CustomState), - CallAnswer - | CallCandidates - | CallHangup - | CallInvite - | Direct - | Dummy - | ForwardedRoomKey - | FullyRead - | IgnoredUserList - | KeyVerificationAccept - | KeyVerificationCancel - | KeyVerificationKey - | KeyVerificationMac - | KeyVerificationRequest - | KeyVerificationStart - | Presence - | PushRules - | Receipt - | RoomEncrypted - | RoomKey - | RoomKeyRequest - | RoomMessage - | RoomMessageFeedback - | RoomRedaction - | Sticker - | Tag - | Typing => Err(D::Error::custom("invalid event type")), - } - } -} - -impl From for Event { - fn from(event: only::Event) -> Self { - use only::Event::*; - - match event { - Direct(ev) => Event::Direct(ev), - Dummy(ev) => Event::Dummy(ev), - ForwardedRoomKey(ev) => Event::ForwardedRoomKey(ev), - FullyRead(ev) => Event::FullyRead(ev), - KeyVerificationAccept(ev) => Event::KeyVerificationAccept(ev), - KeyVerificationCancel(ev) => Event::KeyVerificationCancel(ev), - KeyVerificationKey(ev) => Event::KeyVerificationKey(ev), - KeyVerificationMac(ev) => Event::KeyVerificationMac(ev), - KeyVerificationRequest(ev) => Event::KeyVerificationRequest(ev), - KeyVerificationStart(ev) => Event::KeyVerificationStart(ev), - IgnoredUserList(ev) => Event::IgnoredUserList(ev), - Presence(ev) => Event::Presence(ev), - PushRules(ev) => Event::PushRules(ev), - RoomKey(ev) => Event::RoomKey(ev), - RoomKeyRequest(ev) => Event::RoomKeyRequest(ev), - Receipt(ev) => Event::Receipt(ev), - Tag(ev) => Event::Tag(ev), - Typing(ev) => Event::Typing(ev), - Custom(ev) => Event::Custom(ev), - } - } -} - -impl From for Event { - fn from(room_event: RoomEvent) -> Self { - use RoomEvent::*; - - match room_event { - CallAnswer(ev) => Event::CallAnswer(ev), - CallCandidates(ev) => Event::CallCandidates(ev), - CallHangup(ev) => Event::CallHangup(ev), - CallInvite(ev) => Event::CallInvite(ev), - RoomAliases(ev) => Event::RoomAliases(ev), - RoomAvatar(ev) => Event::RoomAvatar(ev), - RoomCanonicalAlias(ev) => Event::RoomCanonicalAlias(ev), - RoomCreate(ev) => Event::RoomCreate(ev), - RoomEncrypted(ev) => Event::RoomEncrypted(ev), - RoomEncryption(ev) => Event::RoomEncryption(ev), - RoomGuestAccess(ev) => Event::RoomGuestAccess(ev), - RoomHistoryVisibility(ev) => Event::RoomHistoryVisibility(ev), - RoomJoinRules(ev) => Event::RoomJoinRules(ev), - RoomMember(ev) => Event::RoomMember(ev), - RoomMessage(ev) => Event::RoomMessage(ev), - RoomMessageFeedback(ev) => Event::RoomMessageFeedback(ev), - RoomName(ev) => Event::RoomName(ev), - RoomPinnedEvents(ev) => Event::RoomPinnedEvents(ev), - RoomPowerLevels(ev) => Event::RoomPowerLevels(ev), - RoomRedaction(ev) => Event::RoomRedaction(ev), - RoomServerAcl(ev) => Event::RoomServerAcl(ev), - RoomThirdPartyInvite(ev) => Event::RoomThirdPartyInvite(ev), - RoomTombstone(ev) => Event::RoomTombstone(ev), - RoomTopic(ev) => Event::RoomTopic(ev), - Sticker(ev) => Event::Sticker(ev), - CustomRoom(ev) => Event::CustomRoom(ev), - CustomState(ev) => Event::CustomState(ev), - } - } -} - -impl From for RoomEvent { - fn from(room_event: only::RoomEvent) -> Self { - use only::RoomEvent::*; - - match room_event { - CallAnswer(ev) => RoomEvent::CallAnswer(ev), - CallCandidates(ev) => RoomEvent::CallCandidates(ev), - CallHangup(ev) => RoomEvent::CallHangup(ev), - CallInvite(ev) => RoomEvent::CallInvite(ev), - RoomEncrypted(ev) => RoomEvent::RoomEncrypted(ev), - RoomMessage(ev) => RoomEvent::RoomMessage(ev), - RoomMessageFeedback(ev) => RoomEvent::RoomMessageFeedback(ev), - RoomRedaction(ev) => RoomEvent::RoomRedaction(ev), - Sticker(ev) => RoomEvent::Sticker(ev), - CustomRoom(ev) => RoomEvent::CustomRoom(ev), - } - } -} - -impl From for RoomEvent { - fn from(state_event: StateEvent) -> Self { - use StateEvent::*; - - match state_event { - RoomAliases(ev) => RoomEvent::RoomAliases(ev), - RoomAvatar(ev) => RoomEvent::RoomAvatar(ev), - RoomCanonicalAlias(ev) => RoomEvent::RoomCanonicalAlias(ev), - RoomCreate(ev) => RoomEvent::RoomCreate(ev), - RoomEncryption(ev) => RoomEvent::RoomEncryption(ev), - RoomGuestAccess(ev) => RoomEvent::RoomGuestAccess(ev), - RoomHistoryVisibility(ev) => RoomEvent::RoomHistoryVisibility(ev), - RoomJoinRules(ev) => RoomEvent::RoomJoinRules(ev), - RoomMember(ev) => RoomEvent::RoomMember(ev), - RoomName(ev) => RoomEvent::RoomName(ev), - RoomPinnedEvents(ev) => RoomEvent::RoomPinnedEvents(ev), - RoomPowerLevels(ev) => RoomEvent::RoomPowerLevels(ev), - RoomServerAcl(ev) => RoomEvent::RoomServerAcl(ev), - RoomThirdPartyInvite(ev) => RoomEvent::RoomThirdPartyInvite(ev), - RoomTombstone(ev) => RoomEvent::RoomTombstone(ev), - RoomTopic(ev) => RoomEvent::RoomTopic(ev), - CustomState(ev) => RoomEvent::CustomState(ev), - } - } -} - -impl From for Event { - fn from(state_event: StateEvent) -> Self { - Event::from(RoomEvent::from(state_event)) - } -} diff --git a/src/collections/raw/only.rs b/src/collections/raw/only.rs deleted file mode 100644 index e98d8ddf..00000000 --- a/src/collections/raw/only.rs +++ /dev/null @@ -1,255 +0,0 @@ -//! Enums for heterogeneous collections of events, exclusive to event types that implement "at -//! most" the trait of the same name. - -use serde::{de::Error as _, Deserialize, Deserializer}; -use serde_json::Value as JsonValue; - -pub use super::all::StateEvent; -use crate::{ - call::{ - answer::raw::AnswerEvent, candidates::raw::CandidatesEvent, hangup::raw::HangupEvent, - invite::raw::InviteEvent, - }, - custom::raw::{CustomEvent, CustomRoomEvent}, - direct::raw::DirectEvent, - dummy::raw::DummyEvent, - forwarded_room_key::raw::ForwardedRoomKeyEvent, - fully_read::raw::FullyReadEvent, - ignored_user_list::raw::IgnoredUserListEvent, - key::verification::{ - accept::raw::AcceptEvent, cancel::raw::CancelEvent, key::raw::KeyEvent, mac::raw::MacEvent, - request::raw::RequestEvent, start::raw::StartEvent, - }, - presence::raw::PresenceEvent, - push_rules::raw::PushRulesEvent, - receipt::raw::ReceiptEvent, - room::{ - encrypted::raw::EncryptedEvent, - message::{feedback::raw::FeedbackEvent, raw::MessageEvent}, - redaction::raw::RedactionEvent, - }, - room_key::raw::RoomKeyEvent, - room_key_request::raw::RoomKeyRequestEvent, - sticker::raw::StickerEvent, - tag::raw::TagEvent, - typing::raw::TypingEvent, - util::get_field, - EventType, -}; - -/// A basic event. -#[derive(Clone, Debug)] -#[allow(clippy::large_enum_variant)] -pub enum Event { - /// m.direct - Direct(DirectEvent), - - /// m.dummy - Dummy(DummyEvent), - - /// m.forwarded_room_key - ForwardedRoomKey(ForwardedRoomKeyEvent), - - /// m.fully_read - FullyRead(FullyReadEvent), - - /// m.key.verification.accept - KeyVerificationAccept(AcceptEvent), - - /// m.key.verification.cancel - KeyVerificationCancel(CancelEvent), - - /// m.key.verification.key - KeyVerificationKey(KeyEvent), - - /// m.key.verification.mac - KeyVerificationMac(MacEvent), - - /// m.key.verification.request - KeyVerificationRequest(RequestEvent), - - /// m.key.verification.start - KeyVerificationStart(StartEvent), - - /// m.ignored_user_list - IgnoredUserList(IgnoredUserListEvent), - - /// m.presence - Presence(PresenceEvent), - - /// m.push_rules - PushRules(PushRulesEvent), - - /// m.room_key - RoomKey(RoomKeyEvent), - - /// m.room_key_request - RoomKeyRequest(RoomKeyRequestEvent), - - /// m.receipt - Receipt(ReceiptEvent), - - /// m.tag - Tag(TagEvent), - - /// m.typing - Typing(TypingEvent), - - /// Any basic event that is not part of the specification. - Custom(CustomEvent), -} - -/// A room event. -#[derive(Clone, Debug)] -#[allow(clippy::large_enum_variant)] -pub enum RoomEvent { - /// m.call.answer - CallAnswer(AnswerEvent), - - /// m.call.candidates - CallCandidates(CandidatesEvent), - - /// m.call.hangup - CallHangup(HangupEvent), - - /// m.call.invite - CallInvite(InviteEvent), - - /// m.room.encrypted - RoomEncrypted(EncryptedEvent), - - /// m.room.message - RoomMessage(MessageEvent), - - /// m.room.message.feedback - RoomMessageFeedback(FeedbackEvent), - - /// m.room.redaction - RoomRedaction(RedactionEvent), - - /// m.sticker - Sticker(StickerEvent), - - /// Any room event that is not part of the specification. - CustomRoom(CustomRoomEvent), -} - -impl<'de> Deserialize<'de> for Event { - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - use crate::util::try_variant_from_value as from_value; - use EventType::*; - - let value = JsonValue::deserialize(deserializer)?; - let event_type = get_field(&value, "type")?; - - match event_type { - Direct => from_value(value, Event::Direct), - Dummy => from_value(value, Event::Dummy), - ForwardedRoomKey => from_value(value, Event::ForwardedRoomKey), - FullyRead => from_value(value, Event::FullyRead), - KeyVerificationAccept => from_value(value, Event::KeyVerificationAccept), - KeyVerificationCancel => from_value(value, Event::KeyVerificationCancel), - KeyVerificationKey => from_value(value, Event::KeyVerificationKey), - KeyVerificationMac => from_value(value, Event::KeyVerificationMac), - KeyVerificationRequest => from_value(value, Event::KeyVerificationRequest), - KeyVerificationStart => from_value(value, Event::KeyVerificationStart), - IgnoredUserList => from_value(value, Event::IgnoredUserList), - Presence => from_value(value, Event::Presence), - PushRules => from_value(value, Event::PushRules), - RoomKey => from_value(value, Event::RoomKey), - RoomKeyRequest => from_value(value, Event::RoomKeyRequest), - Receipt => from_value(value, Event::Receipt), - Tag => from_value(value, Event::Tag), - Typing => from_value(value, Event::Typing), - Custom(_event_type_name) => from_value(value, Event::Custom), - CallAnswer - | CallCandidates - | CallHangup - | CallInvite - | RoomAliases - | RoomAvatar - | RoomCanonicalAlias - | RoomCreate - | RoomEncrypted - | RoomEncryption - | RoomGuestAccess - | RoomHistoryVisibility - | RoomJoinRules - | RoomMember - | RoomMessage - | RoomMessageFeedback - | RoomName - | RoomPinnedEvents - | RoomPowerLevels - | RoomServerAcl - | RoomThirdPartyInvite - | RoomTombstone - | RoomTopic - | RoomRedaction - | Sticker => Err(D::Error::custom("invalid event type")), - } - } -} - -impl<'de> Deserialize<'de> for RoomEvent { - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - use crate::util::try_variant_from_value as from_value; - use EventType::*; - - let value = JsonValue::deserialize(deserializer)?; - let event_type = get_field(&value, "type")?; - - match event_type { - CallAnswer => from_value(value, RoomEvent::CallAnswer), - CallCandidates => from_value(value, RoomEvent::CallCandidates), - CallHangup => from_value(value, RoomEvent::CallHangup), - CallInvite => from_value(value, RoomEvent::CallInvite), - RoomEncrypted => from_value(value, RoomEvent::RoomEncrypted), - RoomMessage => from_value(value, RoomEvent::RoomMessage), - RoomMessageFeedback => from_value(value, RoomEvent::RoomMessageFeedback), - RoomRedaction => from_value(value, RoomEvent::RoomRedaction), - Sticker => from_value(value, RoomEvent::Sticker), - Custom(_event_type_name) => from_value(value, RoomEvent::CustomRoom), - Direct - | Dummy - | ForwardedRoomKey - | FullyRead - | IgnoredUserList - | KeyVerificationAccept - | KeyVerificationCancel - | KeyVerificationKey - | KeyVerificationMac - | KeyVerificationRequest - | KeyVerificationStart - | Presence - | PushRules - | Receipt - | RoomAvatar - | RoomAliases - | RoomCanonicalAlias - | RoomCreate - | RoomEncryption - | RoomGuestAccess - | RoomHistoryVisibility - | RoomJoinRules - | RoomKey - | RoomKeyRequest - | RoomMember - | RoomName - | RoomPinnedEvents - | RoomPowerLevels - | RoomServerAcl - | RoomThirdPartyInvite - | RoomTombstone - | RoomTopic - | Tag - | Typing => Err(D::Error::custom("invalid event type")), - } - } -} diff --git a/src/lib.rs b/src/lib.rs index df54f97e..f4d5a7af 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -143,16 +143,6 @@ extern crate self as ruma_events; pub mod call; // pub mod custom; -/// Enums for heterogeneous collections of events. -// pub mod collections { -// pub mod all; -// pub mod only; - -// mod raw { -// pub mod all; -// pub mod only; -// } -// } // pub mod direct; // pub mod dummy; pub mod forwarded_room_key;