events: Introduce AnyRedacted[Sync]RoomEvent
… and use it to implement Redact for Any[Sync]RoomEvent.
This commit is contained in:
parent
32ba85b9a2
commit
4aec2d5ff0
@ -155,17 +155,6 @@ 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: 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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Any sync room event (room event without a `room_id`, as returned in `/sync` responses)
|
||||
@ -200,17 +189,6 @@ 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 {
|
||||
@ -264,3 +242,75 @@ impl<'de> de::Deserialize<'de> for AnySyncRoomEvent {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Any redacted room event.
|
||||
#[allow(clippy::large_enum_variant)]
|
||||
#[derive(Clone, Debug)]
|
||||
pub enum AnyRedactedRoomEvent {
|
||||
/// Any message event that has been redacted.
|
||||
Message(AnyRedactedMessageEvent),
|
||||
|
||||
/// Any state event that has been redacted.
|
||||
State(AnyRedactedStateEvent),
|
||||
}
|
||||
|
||||
impl Redact for AnyRoomEvent {
|
||||
type Redacted = AnyRedactedRoomEvent;
|
||||
|
||||
/// Redacts `self`, referencing the given event in `unsigned.redacted_because`.
|
||||
///
|
||||
/// Does nothing for events that are already redacted.
|
||||
fn redact(self, redaction: SyncRedactionEvent, version: &RoomVersionId) -> Self::Redacted {
|
||||
match self {
|
||||
Self::Message(ev) => Self::Redacted::Message(ev.redact(redaction, version)),
|
||||
Self::State(ev) => Self::Redacted::State(ev.redact(redaction, version)),
|
||||
Self::RedactedMessage(ev) => Self::Redacted::Message(ev),
|
||||
Self::RedactedState(ev) => Self::Redacted::State(ev),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<AnyRedactedRoomEvent> for AnyRoomEvent {
|
||||
fn from(ev: AnyRedactedRoomEvent) -> Self {
|
||||
match ev {
|
||||
AnyRedactedRoomEvent::Message(ev) => Self::RedactedMessage(ev),
|
||||
AnyRedactedRoomEvent::State(ev) => Self::RedactedState(ev),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Any redacted sync room event (room event without a `room_id`, as returned in `/sync` responses)
|
||||
#[allow(clippy::large_enum_variant)]
|
||||
#[derive(Clone, Debug)]
|
||||
pub enum AnyRedactedSyncRoomEvent {
|
||||
/// Any sync message event that has been redacted.
|
||||
Message(AnyRedactedSyncMessageEvent),
|
||||
|
||||
/// Any sync state event that has been redacted.
|
||||
State(AnyRedactedSyncStateEvent),
|
||||
}
|
||||
|
||||
impl Redact for AnySyncRoomEvent {
|
||||
type Redacted = AnyRedactedSyncRoomEvent;
|
||||
|
||||
/// Redacts `self`, referencing the given event in `unsigned.redacted_because`.
|
||||
///
|
||||
/// Does nothing for events that are already redacted.
|
||||
fn redact(self, redaction: SyncRedactionEvent, version: &RoomVersionId) -> Self::Redacted {
|
||||
match self {
|
||||
Self::Message(ev) => Self::Redacted::Message(ev.redact(redaction, version)),
|
||||
Self::State(ev) => Self::Redacted::State(ev.redact(redaction, version)),
|
||||
Self::RedactedMessage(ev) => Self::Redacted::Message(ev),
|
||||
Self::RedactedState(ev) => Self::Redacted::State(ev),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<AnyRedactedSyncRoomEvent> for AnySyncRoomEvent {
|
||||
fn from(ev: AnyRedactedSyncRoomEvent) -> Self {
|
||||
match ev {
|
||||
AnyRedactedSyncRoomEvent::Message(ev) => Self::RedactedMessage(ev),
|
||||
AnyRedactedSyncRoomEvent::State(ev) => Self::RedactedState(ev),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user