use ruma_events_macros::event_content_enum; use serde::{Deserialize, Serialize}; use crate::{ event_kinds::{ BasicEvent, EphemeralRoomEvent, MessageEvent, MessageEventStub, StateEvent, StateEventStub, StrippedStateEventStub, ToDeviceEvent, }, presence::PresenceEvent, room::redaction::{RedactionEvent, RedactionEventStub}, }; event_content_enum! { /// Any basic event. name: AnyBasicEventContent, events: [ "m.direct", "m.dummy", "m.ignored_user_list", "m.push_rules", "m.room_key", "m.tag", ] } event_content_enum! { /// Any ephemeral room event. name: AnyEphemeralRoomEventContent, events: [ "m.fully_read", "m.receipt", "m.typing", ] } event_content_enum! { /// Any message event. name: AnyMessageEventContent, events: [ "m.call.answer", "m.call.invite", "m.call.hangup", "m.call.candidates", "m.room.message", "m.room.message.feedback", "m.sticker", ] } event_content_enum! { /// Any state event. name: AnyStateEventContent, events: [ "m.room.aliases", "m.room.avatar", "m.room.canonical_alias", "m.room.create", "m.room.encryption", "m.room.guest_access", "m.room.history_visibility", "m.room.join_rules", "m.room.member", "m.room.name", "m.room.pinned_events", "m.room.power_levels", "m.room.redaction", "m.room.server_acl", "m.room.third_party_invite", "m.room.tombstone", "m.room.topic", ] } event_content_enum! { /// Any to-device event. name: AnyToDeviceEventContent, events: [ "m.dummy", "m.room_key", "m.room_key_request", "m.forwarded_room_key", "m.key.verification.request", "m.key.verification.start", "m.key.verification.cancel", "m.key.verification.accept", "m.key.verification.key", "m.key.verification.mac", "m.room.encrypted", ] } /// Any basic event, one that has no (well-known) fields outside of `content`. pub type AnyBasicEvent = BasicEvent; /// Any ephemeral room event. pub type AnyEphemeralRoomEvent = EphemeralRoomEvent; /// Any message event. pub type AnyMessageEvent = MessageEvent; /// Any message event stub (message event without a `room_id`, as returned in `/sync` responses) pub type AnyMessageEventStub = MessageEventStub; /// Any state event. pub type AnyStateEvent = StateEvent; /// Any state event stub (state event without a `room_id`, as returned in `/sync` responses) pub type AnyStateEventStub = StateEventStub; /// Any stripped state event stub (stripped-down state event, as returned for rooms the user has /// been invited to in `/sync` responses) pub type AnyStrippedStateEventStub = StrippedStateEventStub; /// Any to-device event. pub type AnyToDeviceEvent = ToDeviceEvent; /// Any event. #[derive(Clone, Debug, Deserialize, Serialize)] #[serde(untagged)] pub enum AnyEvent { /// Any basic event. Basic(AnyBasicEvent), /// `"m.presence"`, the only non-room event with a `sender` field. Presence(PresenceEvent), /// Any ephemeral room event. Ephemeral(AnyEphemeralRoomEvent), /// Any message event. Message(AnyMessageEvent), /// `"m.room.redaction"`, the only room event with a `redacts` field. Redaction(RedactionEvent), /// Any state event. State(AnyStateEvent), } /// Any room event. #[derive(Clone, Debug, Deserialize, Serialize)] #[serde(untagged)] pub enum AnyRoomEvent { /// Any message event. Message(AnyMessageEvent), /// `"m.room.redaction"`, the only room event with a `redacts` field. Redaction(RedactionEvent), /// Any state event. State(AnyStateEvent), } /// Any room event stub (room event without a `room_id`, as returned in `/sync` responses) #[derive(Clone, Debug, Deserialize, Serialize)] #[serde(untagged)] pub enum AnyRoomEventStub { /// Any message event stub Message(AnyMessageEventStub), /// `"m.room.redaction"` stub Redaction(RedactionEventStub), /// Any state event stub StateEvent(AnyStateEventStub), }