events: Remove AnyEvent enum
This commit is contained in:
parent
7adc141aa0
commit
aca64eccea
@ -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
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user