events: Add redact method to Any[Sync]RoomEvent

This commit is contained in:
Jonas Platte 2021-05-15 02:33:15 +02:00
parent 2914c0b6a0
commit 7403bdf1c8
No known key found for this signature in database
GPG Key ID: CC154DE0E30B7C67

View File

@ -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 {