events: Remove AnyEvent enum

This commit is contained in:
Jonas Platte 2021-05-09 21:06:25 +02:00
parent 7adc141aa0
commit aca64eccea
No known key found for this signature in database
GPG Key ID: 7D261D771D915378
2 changed files with 3 additions and 62 deletions

View File

@ -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<D>(deserializer: D) -> Result<Self, D::Error>
where
D: de::Deserializer<'de>,
{
let json = Box::<RawJsonValue>::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<D>(deserializer: D) -> Result<Self, D::Error>
where

View File

@ -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<AnyRoomEvent>` 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::<SyncMessageEvent<ReactionEventContent>>(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,