diff --git a/crates/ruma-events/src/enums.rs b/crates/ruma-events/src/enums.rs index e2669d92..81a32e47 100644 --- a/crates/ruma-events/src/enums.rs +++ b/crates/ruma-events/src/enums.rs @@ -1,10 +1,14 @@ use ruma_common::MilliSecondsSinceUnixEpoch; use ruma_events_macros::event_enum; -use ruma_identifiers::{EventId, RoomId, UserId}; +use ruma_identifiers::{EventId, RoomId, RoomVersionId, UserId}; use serde::{de, Serialize}; use serde_json::value::RawValue as RawJsonValue; -use crate::{from_raw_json_value, EventDeHelper}; +use crate::{ + from_raw_json_value, + room::redaction::{RedactionEvent, SyncRedactionEvent}, + EventDeHelper, +}; event_enum! { /// Any global account data event. @@ -155,6 +159,17 @@ impl AnyRoomEvent { room_ev_accessor!(room_id: &RoomId); room_ev_accessor!(event_id: &EventId); room_ev_accessor!(sender: &UserId); + + /// Redacts `self`, referencing the given event in `unsigned.redacted_because`. + /// + /// Does nothing for events that are already redacted. + pub fn redact(self, redaction: RedactionEvent, version: &RoomVersionId) -> Self { + match self { + Self::Message(ev) => Self::RedactedMessage(ev.redact(redaction, version)), + Self::State(ev) => Self::RedactedState(ev.redact(redaction, version)), + Self::RedactedMessage(_) | Self::RedactedState(_) => self, + } + } } /// Any sync room event (room event without a `room_id`, as returned in `/sync` responses) @@ -189,6 +204,17 @@ impl AnySyncRoomEvent { Self::RedactedState(ev) => AnyRoomEvent::RedactedState(ev.into_full_event(room_id)), } } + + /// Redacts `self`, referencing the given event in `unsigned.redacted_because`. + /// + /// Does nothing for events that are already redacted. + pub fn redact(self, redaction: SyncRedactionEvent, version: &RoomVersionId) -> Self { + match self { + Self::Message(ev) => Self::RedactedMessage(ev.redact(redaction, version)), + Self::State(ev) => Self::RedactedState(ev.redact(redaction, version)), + Self::RedactedMessage(_) | Self::RedactedState(_) => self, + } + } } impl<'de> de::Deserialize<'de> for AnyRoomEvent {