724 lines
29 KiB
Rust
724 lines
29 KiB
Rust
//! Enums for heterogeneous collections of events, inclusive for every event type that implements
|
|
//! the trait of the same name.
|
|
|
|
use serde::{Serialize, Serializer};
|
|
|
|
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)]
|
|
#[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 TryFromRaw for Event {
|
|
type Raw = raw::Event;
|
|
type Err = String;
|
|
|
|
fn try_from_raw(raw: raw::Event) -> Result<Self, (Self::Err, Self::Raw)> {
|
|
use crate::util::try_convert_variant as conv;
|
|
use raw::Event::*;
|
|
|
|
match raw {
|
|
CallAnswer(c) => conv(CallAnswer, Event::CallAnswer, c),
|
|
CallCandidates(c) => conv(CallCandidates, Event::CallCandidates, c),
|
|
CallHangup(c) => conv(CallHangup, Event::CallHangup, c),
|
|
CallInvite(c) => conv(CallInvite, Event::CallInvite, c),
|
|
Direct(c) => conv(Direct, Event::Direct, c),
|
|
Dummy(c) => conv(Dummy, Event::Dummy, c),
|
|
ForwardedRoomKey(c) => conv(ForwardedRoomKey, Event::ForwardedRoomKey, c),
|
|
FullyRead(c) => conv(FullyRead, Event::FullyRead, c),
|
|
IgnoredUserList(c) => conv(IgnoredUserList, Event::IgnoredUserList, c),
|
|
KeyVerificationAccept(c) => {
|
|
conv(KeyVerificationAccept, Event::KeyVerificationAccept, c)
|
|
}
|
|
KeyVerificationCancel(c) => {
|
|
conv(KeyVerificationCancel, Event::KeyVerificationCancel, c)
|
|
}
|
|
KeyVerificationKey(c) => conv(KeyVerificationKey, Event::KeyVerificationKey, c),
|
|
KeyVerificationMac(c) => conv(KeyVerificationMac, Event::KeyVerificationMac, c),
|
|
KeyVerificationRequest(c) => {
|
|
conv(KeyVerificationRequest, Event::KeyVerificationRequest, c)
|
|
}
|
|
KeyVerificationStart(c) => conv(KeyVerificationStart, Event::KeyVerificationStart, c),
|
|
Presence(c) => conv(Presence, Event::Presence, c),
|
|
PushRules(c) => conv(PushRules, Event::PushRules, c),
|
|
Receipt(c) => conv(Receipt, Event::Receipt, c),
|
|
RoomAliases(c) => conv(RoomAliases, Event::RoomAliases, c),
|
|
RoomAvatar(c) => conv(RoomAvatar, Event::RoomAvatar, c),
|
|
RoomCanonicalAlias(c) => conv(RoomCanonicalAlias, Event::RoomCanonicalAlias, c),
|
|
RoomCreate(c) => conv(RoomCreate, Event::RoomCreate, c),
|
|
RoomEncrypted(c) => conv(RoomEncrypted, Event::RoomEncrypted, c),
|
|
RoomEncryption(c) => conv(RoomEncryption, Event::RoomEncryption, c),
|
|
RoomGuestAccess(c) => conv(RoomGuestAccess, Event::RoomGuestAccess, c),
|
|
RoomHistoryVisibility(c) => {
|
|
conv(RoomHistoryVisibility, Event::RoomHistoryVisibility, c)
|
|
}
|
|
RoomJoinRules(c) => conv(RoomJoinRules, Event::RoomJoinRules, c),
|
|
RoomMember(c) => conv(RoomMember, Event::RoomMember, c),
|
|
RoomMessage(c) => conv(RoomMessage, Event::RoomMessage, c),
|
|
RoomMessageFeedback(c) => conv(RoomMessageFeedback, Event::RoomMessageFeedback, c),
|
|
RoomName(c) => conv(RoomName, Event::RoomName, c),
|
|
RoomPinnedEvents(c) => conv(RoomPinnedEvents, Event::RoomPinnedEvents, c),
|
|
RoomPowerLevels(c) => conv(RoomPowerLevels, Event::RoomPowerLevels, c),
|
|
RoomRedaction(c) => conv(RoomRedaction, Event::RoomRedaction, c),
|
|
RoomServerAcl(c) => conv(RoomServerAcl, Event::RoomServerAcl, c),
|
|
RoomThirdPartyInvite(c) => conv(RoomThirdPartyInvite, Event::RoomThirdPartyInvite, c),
|
|
RoomTombstone(c) => conv(RoomTombstone, Event::RoomTombstone, c),
|
|
RoomTopic(c) => conv(RoomTopic, Event::RoomTopic, c),
|
|
RoomKey(c) => conv(RoomKey, Event::RoomKey, c),
|
|
RoomKeyRequest(c) => conv(RoomKeyRequest, Event::RoomKeyRequest, c),
|
|
Sticker(c) => conv(Sticker, Event::Sticker, c),
|
|
Tag(c) => conv(Tag, Event::Tag, c),
|
|
Typing(c) => conv(Typing, Event::Typing, c),
|
|
Custom(c) => Ok(Event::Custom(c)),
|
|
CustomRoom(c) => Ok(Event::CustomRoom(c)),
|
|
CustomState(c) => Ok(Event::CustomState(c)),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl TryFromRaw for RoomEvent {
|
|
type Raw = raw::RoomEvent;
|
|
type Err = String;
|
|
|
|
fn try_from_raw(raw: raw::RoomEvent) -> Result<Self, (Self::Err, Self::Raw)> {
|
|
use crate::util::try_convert_variant as conv;
|
|
use raw::RoomEvent::*;
|
|
|
|
match raw {
|
|
CallAnswer(c) => conv(CallAnswer, RoomEvent::CallAnswer, c),
|
|
CallCandidates(c) => conv(CallCandidates, RoomEvent::CallCandidates, c),
|
|
CallHangup(c) => conv(CallHangup, RoomEvent::CallHangup, c),
|
|
CallInvite(c) => conv(CallInvite, RoomEvent::CallInvite, c),
|
|
RoomAliases(c) => conv(RoomAliases, RoomEvent::RoomAliases, c),
|
|
RoomAvatar(c) => conv(RoomAvatar, RoomEvent::RoomAvatar, c),
|
|
RoomCanonicalAlias(c) => conv(RoomCanonicalAlias, RoomEvent::RoomCanonicalAlias, c),
|
|
RoomCreate(c) => conv(RoomCreate, RoomEvent::RoomCreate, c),
|
|
RoomEncrypted(c) => conv(RoomEncrypted, RoomEvent::RoomEncrypted, c),
|
|
RoomEncryption(c) => conv(RoomEncryption, RoomEvent::RoomEncryption, c),
|
|
RoomGuestAccess(c) => conv(RoomGuestAccess, RoomEvent::RoomGuestAccess, c),
|
|
RoomHistoryVisibility(c) => {
|
|
conv(RoomHistoryVisibility, RoomEvent::RoomHistoryVisibility, c)
|
|
}
|
|
RoomJoinRules(c) => conv(RoomJoinRules, RoomEvent::RoomJoinRules, c),
|
|
RoomMember(c) => conv(RoomMember, RoomEvent::RoomMember, c),
|
|
RoomMessage(c) => conv(RoomMessage, RoomEvent::RoomMessage, c),
|
|
RoomMessageFeedback(c) => conv(RoomMessageFeedback, RoomEvent::RoomMessageFeedback, c),
|
|
RoomName(c) => conv(RoomName, RoomEvent::RoomName, c),
|
|
RoomPinnedEvents(c) => conv(RoomPinnedEvents, RoomEvent::RoomPinnedEvents, c),
|
|
RoomPowerLevels(c) => conv(RoomPowerLevels, RoomEvent::RoomPowerLevels, c),
|
|
RoomRedaction(c) => conv(RoomRedaction, RoomEvent::RoomRedaction, c),
|
|
RoomServerAcl(c) => conv(RoomServerAcl, RoomEvent::RoomServerAcl, c),
|
|
RoomThirdPartyInvite(c) => {
|
|
conv(RoomThirdPartyInvite, RoomEvent::RoomThirdPartyInvite, c)
|
|
}
|
|
RoomTombstone(c) => conv(RoomTombstone, RoomEvent::RoomTombstone, c),
|
|
RoomTopic(c) => conv(RoomTopic, RoomEvent::RoomTopic, c),
|
|
Sticker(c) => conv(Sticker, RoomEvent::Sticker, c),
|
|
CustomRoom(c) => Ok(RoomEvent::CustomRoom(c)),
|
|
CustomState(c) => Ok(RoomEvent::CustomState(c)),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl TryFromRaw for StateEvent {
|
|
type Raw = raw::StateEvent;
|
|
type Err = String;
|
|
|
|
fn try_from_raw(raw: raw::StateEvent) -> Result<Self, (Self::Err, Self::Raw)> {
|
|
use crate::util::try_convert_variant as conv;
|
|
use raw::StateEvent::*;
|
|
|
|
match raw {
|
|
RoomAliases(c) => conv(RoomAliases, StateEvent::RoomAliases, c),
|
|
RoomAvatar(c) => conv(RoomAvatar, StateEvent::RoomAvatar, c),
|
|
RoomCanonicalAlias(c) => conv(RoomCanonicalAlias, StateEvent::RoomCanonicalAlias, c),
|
|
RoomCreate(c) => conv(RoomCreate, StateEvent::RoomCreate, c),
|
|
RoomEncryption(c) => conv(RoomEncryption, StateEvent::RoomEncryption, c),
|
|
RoomGuestAccess(c) => conv(RoomGuestAccess, StateEvent::RoomGuestAccess, c),
|
|
RoomHistoryVisibility(c) => {
|
|
conv(RoomHistoryVisibility, StateEvent::RoomHistoryVisibility, c)
|
|
}
|
|
RoomJoinRules(c) => conv(RoomJoinRules, StateEvent::RoomJoinRules, c),
|
|
RoomMember(c) => conv(RoomMember, StateEvent::RoomMember, c),
|
|
RoomName(c) => conv(RoomName, StateEvent::RoomName, c),
|
|
RoomPinnedEvents(c) => conv(RoomPinnedEvents, StateEvent::RoomPinnedEvents, c),
|
|
RoomPowerLevels(c) => conv(RoomPowerLevels, StateEvent::RoomPowerLevels, c),
|
|
RoomServerAcl(c) => conv(RoomServerAcl, StateEvent::RoomServerAcl, c),
|
|
RoomThirdPartyInvite(c) => {
|
|
conv(RoomThirdPartyInvite, StateEvent::RoomThirdPartyInvite, c)
|
|
}
|
|
RoomTombstone(c) => conv(RoomTombstone, StateEvent::RoomTombstone, c),
|
|
RoomTopic(c) => conv(RoomTopic, StateEvent::RoomTopic, c),
|
|
CustomState(c) => Ok(StateEvent::CustomState(c)),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Serialize for Event {
|
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
where
|
|
S: Serializer,
|
|
{
|
|
match *self {
|
|
Event::CallAnswer(ref event) => event.serialize(serializer),
|
|
Event::CallCandidates(ref event) => event.serialize(serializer),
|
|
Event::CallHangup(ref event) => event.serialize(serializer),
|
|
Event::CallInvite(ref event) => event.serialize(serializer),
|
|
Event::Direct(ref event) => event.serialize(serializer),
|
|
Event::Dummy(ref event) => event.serialize(serializer),
|
|
Event::ForwardedRoomKey(ref event) => event.serialize(serializer),
|
|
Event::FullyRead(ref event) => event.serialize(serializer),
|
|
Event::KeyVerificationAccept(ref event) => event.serialize(serializer),
|
|
Event::KeyVerificationCancel(ref event) => event.serialize(serializer),
|
|
Event::KeyVerificationKey(ref event) => event.serialize(serializer),
|
|
Event::KeyVerificationMac(ref event) => event.serialize(serializer),
|
|
Event::KeyVerificationRequest(ref event) => event.serialize(serializer),
|
|
Event::KeyVerificationStart(ref event) => event.serialize(serializer),
|
|
Event::IgnoredUserList(ref event) => event.serialize(serializer),
|
|
Event::Presence(ref event) => event.serialize(serializer),
|
|
Event::PushRules(ref event) => event.serialize(serializer),
|
|
Event::Receipt(ref event) => event.serialize(serializer),
|
|
Event::RoomAliases(ref event) => event.serialize(serializer),
|
|
Event::RoomAvatar(ref event) => event.serialize(serializer),
|
|
Event::RoomCanonicalAlias(ref event) => event.serialize(serializer),
|
|
Event::RoomCreate(ref event) => event.serialize(serializer),
|
|
Event::RoomEncrypted(ref event) => event.serialize(serializer),
|
|
Event::RoomEncryption(ref event) => event.serialize(serializer),
|
|
Event::RoomGuestAccess(ref event) => event.serialize(serializer),
|
|
Event::RoomHistoryVisibility(ref event) => event.serialize(serializer),
|
|
Event::RoomJoinRules(ref event) => event.serialize(serializer),
|
|
Event::RoomMember(ref event) => event.serialize(serializer),
|
|
Event::RoomMessage(ref event) => event.serialize(serializer),
|
|
Event::RoomMessageFeedback(ref event) => event.serialize(serializer),
|
|
Event::RoomName(ref event) => event.serialize(serializer),
|
|
Event::RoomPinnedEvents(ref event) => event.serialize(serializer),
|
|
Event::RoomPowerLevels(ref event) => event.serialize(serializer),
|
|
Event::RoomRedaction(ref event) => event.serialize(serializer),
|
|
Event::RoomServerAcl(ref event) => event.serialize(serializer),
|
|
Event::RoomThirdPartyInvite(ref event) => event.serialize(serializer),
|
|
Event::RoomTombstone(ref event) => event.serialize(serializer),
|
|
Event::RoomTopic(ref event) => event.serialize(serializer),
|
|
Event::RoomKey(ref event) => event.serialize(serializer),
|
|
Event::RoomKeyRequest(ref event) => event.serialize(serializer),
|
|
Event::Sticker(ref event) => event.serialize(serializer),
|
|
Event::Tag(ref event) => event.serialize(serializer),
|
|
Event::Typing(ref event) => event.serialize(serializer),
|
|
Event::Custom(ref event) => event.serialize(serializer),
|
|
Event::CustomRoom(ref event) => event.serialize(serializer),
|
|
Event::CustomState(ref event) => event.serialize(serializer),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Serialize for RoomEvent {
|
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
where
|
|
S: Serializer,
|
|
{
|
|
match *self {
|
|
RoomEvent::CallAnswer(ref event) => event.serialize(serializer),
|
|
RoomEvent::CallCandidates(ref event) => event.serialize(serializer),
|
|
RoomEvent::CallHangup(ref event) => event.serialize(serializer),
|
|
RoomEvent::CallInvite(ref event) => event.serialize(serializer),
|
|
RoomEvent::RoomAliases(ref event) => event.serialize(serializer),
|
|
RoomEvent::RoomAvatar(ref event) => event.serialize(serializer),
|
|
RoomEvent::RoomCanonicalAlias(ref event) => event.serialize(serializer),
|
|
RoomEvent::RoomCreate(ref event) => event.serialize(serializer),
|
|
RoomEvent::RoomEncrypted(ref event) => event.serialize(serializer),
|
|
RoomEvent::RoomEncryption(ref event) => event.serialize(serializer),
|
|
RoomEvent::RoomGuestAccess(ref event) => event.serialize(serializer),
|
|
RoomEvent::RoomHistoryVisibility(ref event) => event.serialize(serializer),
|
|
RoomEvent::RoomJoinRules(ref event) => event.serialize(serializer),
|
|
RoomEvent::RoomMember(ref event) => event.serialize(serializer),
|
|
RoomEvent::RoomMessage(ref event) => event.serialize(serializer),
|
|
RoomEvent::RoomMessageFeedback(ref event) => event.serialize(serializer),
|
|
RoomEvent::RoomName(ref event) => event.serialize(serializer),
|
|
RoomEvent::RoomPinnedEvents(ref event) => event.serialize(serializer),
|
|
RoomEvent::RoomPowerLevels(ref event) => event.serialize(serializer),
|
|
RoomEvent::RoomRedaction(ref event) => event.serialize(serializer),
|
|
RoomEvent::RoomServerAcl(ref event) => event.serialize(serializer),
|
|
RoomEvent::RoomThirdPartyInvite(ref event) => event.serialize(serializer),
|
|
RoomEvent::RoomTombstone(ref event) => event.serialize(serializer),
|
|
RoomEvent::RoomTopic(ref event) => event.serialize(serializer),
|
|
RoomEvent::Sticker(ref event) => event.serialize(serializer),
|
|
RoomEvent::CustomRoom(ref event) => event.serialize(serializer),
|
|
RoomEvent::CustomState(ref event) => event.serialize(serializer),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Serialize for StateEvent {
|
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
where
|
|
S: Serializer,
|
|
{
|
|
match *self {
|
|
StateEvent::RoomAliases(ref event) => event.serialize(serializer),
|
|
StateEvent::RoomAvatar(ref event) => event.serialize(serializer),
|
|
StateEvent::RoomCanonicalAlias(ref event) => event.serialize(serializer),
|
|
StateEvent::RoomCreate(ref event) => event.serialize(serializer),
|
|
StateEvent::RoomEncryption(ref event) => event.serialize(serializer),
|
|
StateEvent::RoomGuestAccess(ref event) => event.serialize(serializer),
|
|
StateEvent::RoomHistoryVisibility(ref event) => event.serialize(serializer),
|
|
StateEvent::RoomJoinRules(ref event) => event.serialize(serializer),
|
|
StateEvent::RoomMember(ref event) => event.serialize(serializer),
|
|
StateEvent::RoomName(ref event) => event.serialize(serializer),
|
|
StateEvent::RoomPinnedEvents(ref event) => event.serialize(serializer),
|
|
StateEvent::RoomPowerLevels(ref event) => event.serialize(serializer),
|
|
StateEvent::RoomServerAcl(ref event) => event.serialize(serializer),
|
|
StateEvent::RoomThirdPartyInvite(ref event) => event.serialize(serializer),
|
|
StateEvent::RoomTombstone(ref event) => event.serialize(serializer),
|
|
StateEvent::RoomTopic(ref event) => event.serialize(serializer),
|
|
StateEvent::CustomState(ref event) => event.serialize(serializer),
|
|
}
|
|
}
|
|
}
|
|
|
|
macro_rules! impl_from_t_for_event {
|
|
($ty:ty, $variant:ident) => {
|
|
impl From<$ty> for Event {
|
|
fn from(event: $ty) -> Self {
|
|
Event::$variant(event)
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
impl_from_t_for_event!(AnswerEvent, CallAnswer);
|
|
impl_from_t_for_event!(CandidatesEvent, CallCandidates);
|
|
impl_from_t_for_event!(HangupEvent, CallHangup);
|
|
impl_from_t_for_event!(InviteEvent, CallInvite);
|
|
impl_from_t_for_event!(DirectEvent, Direct);
|
|
impl_from_t_for_event!(DummyEvent, Dummy);
|
|
impl_from_t_for_event!(ForwardedRoomKeyEvent, ForwardedRoomKey);
|
|
impl_from_t_for_event!(FullyReadEvent, FullyRead);
|
|
impl_from_t_for_event!(AcceptEvent, KeyVerificationAccept);
|
|
impl_from_t_for_event!(CancelEvent, KeyVerificationCancel);
|
|
impl_from_t_for_event!(KeyEvent, KeyVerificationKey);
|
|
impl_from_t_for_event!(MacEvent, KeyVerificationMac);
|
|
impl_from_t_for_event!(RequestEvent, KeyVerificationRequest);
|
|
impl_from_t_for_event!(StartEvent, KeyVerificationStart);
|
|
impl_from_t_for_event!(IgnoredUserListEvent, IgnoredUserList);
|
|
impl_from_t_for_event!(PresenceEvent, Presence);
|
|
impl_from_t_for_event!(PushRulesEvent, PushRules);
|
|
impl_from_t_for_event!(ReceiptEvent, Receipt);
|
|
impl_from_t_for_event!(AliasesEvent, RoomAliases);
|
|
impl_from_t_for_event!(AvatarEvent, RoomAvatar);
|
|
impl_from_t_for_event!(CanonicalAliasEvent, RoomCanonicalAlias);
|
|
impl_from_t_for_event!(CreateEvent, RoomCreate);
|
|
impl_from_t_for_event!(EncryptedEvent, RoomEncrypted);
|
|
impl_from_t_for_event!(EncryptionEvent, RoomEncryption);
|
|
impl_from_t_for_event!(GuestAccessEvent, RoomGuestAccess);
|
|
impl_from_t_for_event!(HistoryVisibilityEvent, RoomHistoryVisibility);
|
|
impl_from_t_for_event!(JoinRulesEvent, RoomJoinRules);
|
|
impl_from_t_for_event!(MemberEvent, RoomMember);
|
|
impl_from_t_for_event!(MessageEvent, RoomMessage);
|
|
impl_from_t_for_event!(FeedbackEvent, RoomMessageFeedback);
|
|
impl_from_t_for_event!(NameEvent, RoomName);
|
|
impl_from_t_for_event!(PinnedEventsEvent, RoomPinnedEvents);
|
|
impl_from_t_for_event!(PowerLevelsEvent, RoomPowerLevels);
|
|
impl_from_t_for_event!(RedactionEvent, RoomRedaction);
|
|
impl_from_t_for_event!(ServerAclEvent, RoomServerAcl);
|
|
impl_from_t_for_event!(ThirdPartyInviteEvent, RoomThirdPartyInvite);
|
|
impl_from_t_for_event!(TombstoneEvent, RoomTombstone);
|
|
impl_from_t_for_event!(TopicEvent, RoomTopic);
|
|
impl_from_t_for_event!(RoomKeyEvent, RoomKey);
|
|
impl_from_t_for_event!(RoomKeyRequestEvent, RoomKeyRequest);
|
|
impl_from_t_for_event!(StickerEvent, Sticker);
|
|
impl_from_t_for_event!(TagEvent, Tag);
|
|
impl_from_t_for_event!(TypingEvent, Typing);
|
|
impl_from_t_for_event!(CustomEvent, Custom);
|
|
impl_from_t_for_event!(CustomRoomEvent, CustomRoom);
|
|
impl_from_t_for_event!(CustomStateEvent, CustomState);
|
|
|
|
macro_rules! impl_from_t_for_room_event {
|
|
($ty:ty, $variant:ident) => {
|
|
impl From<$ty> for RoomEvent {
|
|
fn from(event: $ty) -> Self {
|
|
RoomEvent::$variant(event)
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
impl_from_t_for_room_event!(AnswerEvent, CallAnswer);
|
|
impl_from_t_for_room_event!(CandidatesEvent, CallCandidates);
|
|
impl_from_t_for_room_event!(HangupEvent, CallHangup);
|
|
impl_from_t_for_room_event!(InviteEvent, CallInvite);
|
|
impl_from_t_for_room_event!(AliasesEvent, RoomAliases);
|
|
impl_from_t_for_room_event!(AvatarEvent, RoomAvatar);
|
|
impl_from_t_for_room_event!(CanonicalAliasEvent, RoomCanonicalAlias);
|
|
impl_from_t_for_room_event!(CreateEvent, RoomCreate);
|
|
impl_from_t_for_room_event!(EncryptedEvent, RoomEncrypted);
|
|
impl_from_t_for_room_event!(EncryptionEvent, RoomEncryption);
|
|
impl_from_t_for_room_event!(GuestAccessEvent, RoomGuestAccess);
|
|
impl_from_t_for_room_event!(HistoryVisibilityEvent, RoomHistoryVisibility);
|
|
impl_from_t_for_room_event!(JoinRulesEvent, RoomJoinRules);
|
|
impl_from_t_for_room_event!(MemberEvent, RoomMember);
|
|
impl_from_t_for_room_event!(MessageEvent, RoomMessage);
|
|
impl_from_t_for_room_event!(FeedbackEvent, RoomMessageFeedback);
|
|
impl_from_t_for_room_event!(NameEvent, RoomName);
|
|
impl_from_t_for_room_event!(PinnedEventsEvent, RoomPinnedEvents);
|
|
impl_from_t_for_room_event!(PowerLevelsEvent, RoomPowerLevels);
|
|
impl_from_t_for_room_event!(RedactionEvent, RoomRedaction);
|
|
impl_from_t_for_room_event!(ServerAclEvent, RoomServerAcl);
|
|
impl_from_t_for_room_event!(StickerEvent, Sticker);
|
|
impl_from_t_for_room_event!(ThirdPartyInviteEvent, RoomThirdPartyInvite);
|
|
impl_from_t_for_room_event!(TombstoneEvent, RoomTombstone);
|
|
impl_from_t_for_room_event!(TopicEvent, RoomTopic);
|
|
impl_from_t_for_room_event!(CustomRoomEvent, CustomRoom);
|
|
impl_from_t_for_room_event!(CustomStateEvent, CustomState);
|
|
|
|
macro_rules! impl_from_t_for_state_event {
|
|
($ty:ty, $variant:ident) => {
|
|
impl From<$ty> for StateEvent {
|
|
fn from(event: $ty) -> Self {
|
|
StateEvent::$variant(event)
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
impl_from_t_for_state_event!(AliasesEvent, RoomAliases);
|
|
impl_from_t_for_state_event!(AvatarEvent, RoomAvatar);
|
|
impl_from_t_for_state_event!(CanonicalAliasEvent, RoomCanonicalAlias);
|
|
impl_from_t_for_state_event!(CreateEvent, RoomCreate);
|
|
impl_from_t_for_state_event!(EncryptionEvent, RoomEncryption);
|
|
impl_from_t_for_state_event!(GuestAccessEvent, RoomGuestAccess);
|
|
impl_from_t_for_state_event!(HistoryVisibilityEvent, RoomHistoryVisibility);
|
|
impl_from_t_for_state_event!(JoinRulesEvent, RoomJoinRules);
|
|
impl_from_t_for_state_event!(MemberEvent, RoomMember);
|
|
impl_from_t_for_state_event!(NameEvent, RoomName);
|
|
impl_from_t_for_state_event!(PinnedEventsEvent, RoomPinnedEvents);
|
|
impl_from_t_for_state_event!(PowerLevelsEvent, RoomPowerLevels);
|
|
impl_from_t_for_state_event!(ServerAclEvent, RoomServerAcl);
|
|
impl_from_t_for_state_event!(ThirdPartyInviteEvent, RoomThirdPartyInvite);
|
|
impl_from_t_for_state_event!(TombstoneEvent, RoomTombstone);
|
|
impl_from_t_for_state_event!(TopicEvent, RoomTopic);
|
|
impl_from_t_for_state_event!(CustomStateEvent, CustomState);
|