ruma_events/unsigned/
redacted_because_serde.rs1use ruma_common::{
2 MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedUserId, serde::from_raw_json_value,
3};
4use serde::{Deserialize, de};
5use serde_json::value::RawValue as RawJsonValue;
6
7use super::{AnyRedactionEvent, CustomRedactionEvent};
8use crate::EventTypeDeHelper;
9
10impl<'de> Deserialize<'de> for AnyRedactionEvent {
11 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
12 where
13 D: de::Deserializer<'de>,
14 {
15 let json = Box::<RawJsonValue>::deserialize(deserializer)?;
16 let EventTypeDeHelper { ev_type, .. } = from_raw_json_value(&json)?;
17
18 match &*ev_type {
19 "m.room.redaction" => from_raw_json_value(&json).map(Self::RoomRedaction),
20 #[cfg(feature = "unstable-msc4293")]
21 "m.room.member" => from_raw_json_value(&json).map(Self::RoomMember),
22 _ => {
23 let CustomRedactionEventDeHelper { event_type, event_id, sender, origin_server_ts } =
24 from_raw_json_value(&json)?;
25 Ok(Self::_Custom(CustomRedactionEvent {
26 event_type,
27 event_id,
28 sender,
29 origin_server_ts,
30 }))
31 }
32 }
33 }
34}
35
36#[derive(Deserialize)]
37struct CustomRedactionEventDeHelper {
38 #[serde(rename = "type")]
40 event_type: Box<str>,
41
42 event_id: OwnedEventId,
44
45 sender: OwnedUserId,
47
48 origin_server_ts: MilliSecondsSinceUnixEpoch,
50}