diff --git a/crates/ruma-events/src/enums.rs b/crates/ruma-events/src/enums.rs index dcdba064..cdf6b5ea 100644 --- a/crates/ruma-events/src/enums.rs +++ b/crates/ruma-events/src/enums.rs @@ -112,30 +112,6 @@ event_enum! { ] } -/// Any event. -#[allow(clippy::large_enum_variant)] -#[derive(Clone, Debug, Serialize)] -#[serde(untagged)] -pub enum AnyEvent { - /// Any basic event. - Basic(AnyBasicEvent), - - /// Any ephemeral room event. - Ephemeral(AnyEphemeralRoomEvent), - - /// Any message event. - Message(AnyMessageEvent), - - /// Any state event. - State(AnyStateEvent), - - /// Any message event that has been redacted. - RedactedMessage(AnyRedactedMessageEvent), - - /// Any state event that has been redacted. - RedactedState(AnyRedactedStateEvent), -} - /// Any room event. #[allow(clippy::large_enum_variant)] #[derive(Clone, Debug, Serialize)] @@ -172,41 +148,6 @@ pub enum AnySyncRoomEvent { RedactedState(AnyRedactedSyncStateEvent), } -// FIXME `#[serde(untagged)]` deserialization fails for these enums which -// is odd as we are doing basically the same thing here, investigate? -impl<'de> de::Deserialize<'de> for AnyEvent { - fn deserialize(deserializer: D) -> Result - where - D: de::Deserializer<'de>, - { - let json = Box::::deserialize(deserializer)?; - let EventDeHelper { state_key, event_id, room_id, unsigned, .. } = - from_raw_json_value(&json)?; - - // Determine whether the event is a state, message, ephemeral, or basic event - // based on the fields present. - if state_key.is_some() { - Ok(match unsigned { - Some(unsigned) if unsigned.redacted_because.is_some() => { - AnyEvent::RedactedState(from_raw_json_value(&json)?) - } - _ => AnyEvent::State(from_raw_json_value(&json)?), - }) - } else if event_id.is_some() { - Ok(match unsigned { - Some(unsigned) if unsigned.redacted_because.is_some() => { - AnyEvent::RedactedMessage(from_raw_json_value(&json)?) - } - _ => AnyEvent::Message(from_raw_json_value(&json)?), - }) - } else if room_id.is_some() { - Ok(AnyEvent::Ephemeral(from_raw_json_value(&json)?)) - } else { - Ok(AnyEvent::Basic(from_raw_json_value(&json)?)) - } - } -} - impl<'de> de::Deserialize<'de> for AnyRoomEvent { fn deserialize(deserializer: D) -> Result where diff --git a/crates/ruma-events/src/lib.rs b/crates/ruma-events/src/lib.rs index e3e92b4a..659ccfca 100644 --- a/crates/ruma-events/src/lib.rs +++ b/crates/ruma-events/src/lib.rs @@ -82,8 +82,8 @@ //! } //! }); //! -//! // The downside of this event is we cannot use it with the `AnyRoomEvent` or `AnyEvent` enums, -//! // but could be deserialized from a `Raw` that has failed. +//! // The downside of this event is we cannot use it with event enums, but could be deserialized +//! // from a `Raw<_>` that has failed to deserialize. //! matches::assert_matches!( //! serde_json::from_value::>(json), //! Ok(SyncMessageEvent { @@ -188,7 +188,7 @@ pub use self::relation::Relations; pub use self::{ enums::{ AnyBasicEvent, AnyBasicEventContent, AnyEphemeralRoomEvent, AnyEphemeralRoomEventContent, - AnyEvent, AnyInitialStateEvent, AnyMessageEvent, AnyMessageEventContent, + AnyInitialStateEvent, AnyMessageEvent, AnyMessageEventContent, AnyPossiblyRedactedMessageEvent, AnyPossiblyRedactedStateEvent, AnyPossiblyRedactedStrippedStateEvent, AnyPossiblyRedactedSyncMessageEvent, AnyPossiblyRedactedSyncStateEvent, AnyRedactedMessageEvent, AnyRedactedStateEvent,