events: Add 'Original' prefix to unredacted types with a redacted form
This commit is contained in:
parent
d614ad1422
commit
d87874314b
@ -8,7 +8,7 @@ pub mod v3 {
|
|||||||
use js_int::{uint, UInt};
|
use js_int::{uint, UInt};
|
||||||
use ruma_common::{
|
use ruma_common::{
|
||||||
api::ruma_api,
|
api::ruma_api,
|
||||||
events::{AnyRoomEvent, AnyStateEvent},
|
events::{AnyOriginalStateEvent, AnyRoomEvent},
|
||||||
serde::Raw,
|
serde::Raw,
|
||||||
EventId, RoomId,
|
EventId, RoomId,
|
||||||
};
|
};
|
||||||
@ -79,7 +79,7 @@ pub mod v3 {
|
|||||||
|
|
||||||
/// The state of the room at the last event returned.
|
/// The state of the room at the last event returned.
|
||||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||||
pub state: Vec<Raw<AnyStateEvent>>,
|
pub state: Vec<Raw<AnyOriginalStateEvent>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
error: crate::Error
|
error: crate::Error
|
||||||
|
@ -7,7 +7,7 @@ pub mod v3 {
|
|||||||
|
|
||||||
use ruma_common::{
|
use ruma_common::{
|
||||||
api::ruma_api,
|
api::ruma_api,
|
||||||
events::room::member::RoomMemberEvent,
|
events::room::member::OriginalRoomMemberEvent,
|
||||||
serde::{Raw, StringEnum},
|
serde::{Raw, StringEnum},
|
||||||
RoomId,
|
RoomId,
|
||||||
};
|
};
|
||||||
@ -58,7 +58,7 @@ pub mod v3 {
|
|||||||
|
|
||||||
response: {
|
response: {
|
||||||
/// A list of member events.
|
/// A list of member events.
|
||||||
pub chunk: Vec<Raw<RoomMemberEvent>>,
|
pub chunk: Vec<Raw<OriginalRoomMemberEvent>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
error: crate::Error
|
error: crate::Error
|
||||||
@ -73,7 +73,7 @@ pub mod v3 {
|
|||||||
|
|
||||||
impl Response {
|
impl Response {
|
||||||
/// Creates a new `Response` with the given member event chunk.
|
/// Creates a new `Response` with the given member event chunk.
|
||||||
pub fn new(chunk: Vec<Raw<RoomMemberEvent>>) -> Self {
|
pub fn new(chunk: Vec<Raw<OriginalRoomMemberEvent>>) -> Self {
|
||||||
Self { chunk }
|
Self { chunk }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ pub mod v3 {
|
|||||||
use js_int::{uint, UInt};
|
use js_int::{uint, UInt};
|
||||||
use ruma_common::{
|
use ruma_common::{
|
||||||
api::ruma_api,
|
api::ruma_api,
|
||||||
events::{AnyRoomEvent, AnyStateEvent},
|
events::{AnyOriginalStateEvent, AnyRoomEvent},
|
||||||
serde::Raw,
|
serde::Raw,
|
||||||
RoomId,
|
RoomId,
|
||||||
};
|
};
|
||||||
@ -96,7 +96,7 @@ pub mod v3 {
|
|||||||
|
|
||||||
/// A list of state events relevant to showing the `chunk`.
|
/// A list of state events relevant to showing the `chunk`.
|
||||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||||
pub state: Vec<Raw<AnyStateEvent>>,
|
pub state: Vec<Raw<AnyOriginalStateEvent>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
error: crate::Error
|
error: crate::Error
|
||||||
|
@ -10,7 +10,7 @@ pub mod v3 {
|
|||||||
use js_int::{uint, UInt};
|
use js_int::{uint, UInt};
|
||||||
use ruma_common::{
|
use ruma_common::{
|
||||||
api::ruma_api,
|
api::ruma_api,
|
||||||
events::{AnyRoomEvent, AnyStateEvent},
|
events::{AnyOriginalStateEvent, AnyRoomEvent},
|
||||||
serde::{Incoming, Raw, StringEnum},
|
serde::{Incoming, Raw, StringEnum},
|
||||||
EventId, MxcUri, RoomId, UserId,
|
EventId, MxcUri, RoomId, UserId,
|
||||||
};
|
};
|
||||||
@ -385,7 +385,7 @@ pub mod v3 {
|
|||||||
///
|
///
|
||||||
/// This is included if the request had the `include_state` key set with a value of `true`.
|
/// This is included if the request had the `include_state` key set with a value of `true`.
|
||||||
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
|
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
|
||||||
pub state: BTreeMap<Box<RoomId>, Vec<Raw<AnyStateEvent>>>,
|
pub state: BTreeMap<Box<RoomId>, Vec<Raw<AnyOriginalStateEvent>>>,
|
||||||
|
|
||||||
/// List of words which should be highlighted, useful for stemming which may
|
/// List of words which should be highlighted, useful for stemming which may
|
||||||
/// change the query terms.
|
/// change the query terms.
|
||||||
|
@ -5,7 +5,7 @@ pub mod v3 {
|
|||||||
//!
|
//!
|
||||||
//! [spec]: https://spec.matrix.org/v1.2/client-server-api/#get_matrixclientv3roomsroomidstate
|
//! [spec]: https://spec.matrix.org/v1.2/client-server-api/#get_matrixclientv3roomsroomidstate
|
||||||
|
|
||||||
use ruma_common::{api::ruma_api, events::AnyStateEvent, serde::Raw, RoomId};
|
use ruma_common::{api::ruma_api, events::AnyOriginalStateEvent, serde::Raw, RoomId};
|
||||||
|
|
||||||
ruma_api! {
|
ruma_api! {
|
||||||
metadata: {
|
metadata: {
|
||||||
@ -32,7 +32,7 @@ pub mod v3 {
|
|||||||
/// If the user has left the room then this will be the state of the room when they left as
|
/// If the user has left the room then this will be the state of the room when they left as
|
||||||
/// a list of events.
|
/// a list of events.
|
||||||
#[ruma_api(body)]
|
#[ruma_api(body)]
|
||||||
pub room_state: Vec<Raw<AnyStateEvent>>,
|
pub room_state: Vec<Raw<AnyOriginalStateEvent>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
error: crate::Error
|
error: crate::Error
|
||||||
@ -47,7 +47,7 @@ pub mod v3 {
|
|||||||
|
|
||||||
impl Response {
|
impl Response {
|
||||||
/// Creates a new `Response` with the given room state.
|
/// Creates a new `Response` with the given room state.
|
||||||
pub fn new(room_state: Vec<Raw<AnyStateEvent>>) -> Self {
|
pub fn new(room_state: Vec<Raw<AnyOriginalStateEvent>>) -> Self {
|
||||||
Self { room_state }
|
Self { room_state }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,9 +11,9 @@ pub mod v3 {
|
|||||||
use ruma_common::{
|
use ruma_common::{
|
||||||
api::ruma_api,
|
api::ruma_api,
|
||||||
events::{
|
events::{
|
||||||
presence::PresenceEvent, AnyGlobalAccountDataEvent, AnyRoomAccountDataEvent,
|
presence::PresenceEvent, AnyGlobalAccountDataEvent, AnyOriginalSyncStateEvent,
|
||||||
AnyStrippedStateEvent, AnySyncEphemeralRoomEvent, AnySyncRoomEvent, AnySyncStateEvent,
|
AnyRoomAccountDataEvent, AnyStrippedStateEvent, AnySyncEphemeralRoomEvent,
|
||||||
AnyToDeviceEvent,
|
AnySyncRoomEvent, AnyToDeviceEvent,
|
||||||
},
|
},
|
||||||
presence::PresenceState,
|
presence::PresenceState,
|
||||||
serde::{Incoming, Raw},
|
serde::{Incoming, Raw},
|
||||||
@ -384,7 +384,7 @@ pub mod v3 {
|
|||||||
pub struct State {
|
pub struct State {
|
||||||
/// A list of state events.
|
/// A list of state events.
|
||||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||||
pub events: Vec<Raw<AnySyncStateEvent>>,
|
pub events: Vec<Raw<AnyOriginalSyncStateEvent>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl State {
|
impl State {
|
||||||
|
@ -11,7 +11,8 @@
|
|||||||
use criterion::{criterion_group, criterion_main, Criterion};
|
use criterion::{criterion_group, criterion_main, Criterion};
|
||||||
use ruma_common::{
|
use ruma_common::{
|
||||||
events::{
|
events::{
|
||||||
room::power_levels::RoomPowerLevelsEventContent, AnyRoomEvent, AnyStateEvent, StateEvent,
|
room::power_levels::RoomPowerLevelsEventContent, AnyOriginalStateEvent, AnyRoomEvent,
|
||||||
|
OriginalStateEvent,
|
||||||
},
|
},
|
||||||
serde::Raw,
|
serde::Raw,
|
||||||
};
|
};
|
||||||
@ -65,9 +66,9 @@ fn deserialize_any_room_event(c: &mut Criterion) {
|
|||||||
fn deserialize_any_state_event(c: &mut Criterion) {
|
fn deserialize_any_state_event(c: &mut Criterion) {
|
||||||
let json_data = power_levels();
|
let json_data = power_levels();
|
||||||
|
|
||||||
c.bench_function("deserialize to `AnyStateEvent`", |b| {
|
c.bench_function("deserialize to `AnyOriginalStateEvent`", |b| {
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
let _ = serde_json::from_value::<AnyStateEvent>(json_data.clone()).unwrap();
|
let _ = serde_json::from_value::<AnyOriginalStateEvent>(json_data.clone()).unwrap();
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -76,9 +77,9 @@ fn deserialize_any_state_event(c: &mut Criterion) {
|
|||||||
fn deserialize_specific_event(c: &mut Criterion) {
|
fn deserialize_specific_event(c: &mut Criterion) {
|
||||||
let json_data = power_levels();
|
let json_data = power_levels();
|
||||||
|
|
||||||
c.bench_function("deserialize to `StateEvent<PowerLevelsEventContent>`", |b| {
|
c.bench_function("deserialize to `OriginalStateEvent<PowerLevelsEventContent>`", |b| {
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
let _ = serde_json::from_value::<StateEvent<RoomPowerLevelsEventContent>>(
|
let _ = serde_json::from_value::<OriginalStateEvent<RoomPowerLevelsEventContent>>(
|
||||||
json_data.clone(),
|
json_data.clone(),
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
@ -38,10 +38,10 @@
|
|||||||
//! `ruma::api::client::state::send_state_event`'s `Request`.
|
//! `ruma::api::client::state::send_state_event`'s `Request`.
|
||||||
//!
|
//!
|
||||||
//! As a more advanced example we create a reaction message event. For this event we will use a
|
//! As a more advanced example we create a reaction message event. For this event we will use a
|
||||||
//! [`SyncMessageLikeEvent`] struct but any [`MessageLikeEvent`] struct would work.
|
//! [`OriginalSyncMessageLikeEvent`] struct but any [`OriginalMessageLikeEvent`] struct would work.
|
||||||
//!
|
//!
|
||||||
//! ```rust
|
//! ```rust
|
||||||
//! use ruma_common::events::{macros::EventContent, SyncMessageLikeEvent};
|
//! use ruma_common::events::{macros::EventContent, OriginalSyncMessageLikeEvent};
|
||||||
//! use ruma_common::EventId;
|
//! use ruma_common::EventId;
|
||||||
//! use serde::{Deserialize, Serialize};
|
//! use serde::{Deserialize, Serialize};
|
||||||
//!
|
//!
|
||||||
@ -90,8 +90,8 @@
|
|||||||
//! // The downside of this event is we cannot use it with event enums,
|
//! // 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.
|
//! // but could be deserialized from a `Raw<_>` that has failed to deserialize.
|
||||||
//! matches::assert_matches!(
|
//! matches::assert_matches!(
|
||||||
//! serde_json::from_value::<SyncMessageLikeEvent<ReactionEventContent>>(json),
|
//! serde_json::from_value::<OriginalSyncMessageLikeEvent<ReactionEventContent>>(json),
|
||||||
//! Ok(SyncMessageLikeEvent {
|
//! Ok(OriginalSyncMessageLikeEvent {
|
||||||
//! content: ReactionEventContent {
|
//! content: ReactionEventContent {
|
||||||
//! relates_to: RelatesTo::Annotation { key, .. },
|
//! relates_to: RelatesTo::Annotation { key, .. },
|
||||||
//! },
|
//! },
|
||||||
@ -102,7 +102,7 @@
|
|||||||
|
|
||||||
use serde::{de::IgnoredAny, Deserialize, Serializer};
|
use serde::{de::IgnoredAny, Deserialize, Serializer};
|
||||||
|
|
||||||
use self::room::redaction::SyncRoomRedactionEvent;
|
use self::room::redaction::OriginalSyncRoomRedactionEvent;
|
||||||
use crate::{EventEncryptionAlgorithm, RoomVersionId};
|
use crate::{EventEncryptionAlgorithm, RoomVersionId};
|
||||||
|
|
||||||
// Needs to be public for trybuild tests
|
// Needs to be public for trybuild tests
|
||||||
@ -180,7 +180,11 @@ pub trait Redact {
|
|||||||
///
|
///
|
||||||
/// A small number of events have room-version specific redaction behavior, so a version has to
|
/// A small number of events have room-version specific redaction behavior, so a version has to
|
||||||
/// be specified.
|
/// be specified.
|
||||||
fn redact(self, redaction: SyncRoomRedactionEvent, version: &RoomVersionId) -> Self::Redacted;
|
fn redact(
|
||||||
|
self,
|
||||||
|
redaction: OriginalSyncRoomRedactionEvent,
|
||||||
|
version: &RoomVersionId,
|
||||||
|
) -> Self::Redacted;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Trait to define the behavior of redact an event's content object.
|
/// Trait to define the behavior of redact an event's content object.
|
||||||
|
@ -39,9 +39,9 @@ where
|
|||||||
/// The base trait that all redacted event content types implement.
|
/// The base trait that all redacted event content types implement.
|
||||||
///
|
///
|
||||||
/// This trait's associated functions and methods should not be used to build
|
/// This trait's associated functions and methods should not be used to build
|
||||||
/// redacted events, prefer the `redact` method on `AnyStateEvent` and
|
/// redacted events, prefer the `redact` method on `AnyOriginalStateEvent` and
|
||||||
/// `AnyMessageLikeEvent` and their "sync" and "stripped" counterparts. The
|
/// `AnyOriginalMessageLikeEvent` and their "sync" and "stripped" counterparts.
|
||||||
/// `RedactedEventContent` trait is an implementation detail, ruma makes no
|
/// The `RedactedEventContent` trait is an implementation detail, ruma makes no
|
||||||
/// API guarantees.
|
/// API guarantees.
|
||||||
pub trait RedactedEventContent: EventContent {
|
pub trait RedactedEventContent: EventContent {
|
||||||
/// Constructs the redacted event content.
|
/// Constructs the redacted event content.
|
||||||
|
@ -4,7 +4,7 @@ use serde_json::value::RawValue as RawJsonValue;
|
|||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
key,
|
key,
|
||||||
room::{encrypted, redaction::SyncRoomRedactionEvent},
|
room::{encrypted, redaction::OriginalSyncRoomRedactionEvent},
|
||||||
Redact, UnsignedDeHelper,
|
Redact, UnsignedDeHelper,
|
||||||
};
|
};
|
||||||
use crate::{
|
use crate::{
|
||||||
@ -129,8 +129,8 @@ macro_rules! room_ev_accessor {
|
|||||||
#[doc = concat!("Returns this event's `", stringify!($field), "` field.")]
|
#[doc = concat!("Returns this event's `", stringify!($field), "` field.")]
|
||||||
pub fn $field(&self) -> $ty {
|
pub fn $field(&self) -> $ty {
|
||||||
match self {
|
match self {
|
||||||
Self::MessageLike(ev) => ev.$field(),
|
Self::OriginalMessageLike(ev) => ev.$field(),
|
||||||
Self::State(ev) => ev.$field(),
|
Self::OriginalState(ev) => ev.$field(),
|
||||||
Self::RedactedMessageLike(ev) => ev.$field(),
|
Self::RedactedMessageLike(ev) => ev.$field(),
|
||||||
Self::RedactedState(ev) => ev.$field(),
|
Self::RedactedState(ev) => ev.$field(),
|
||||||
}
|
}
|
||||||
@ -143,11 +143,11 @@ macro_rules! room_ev_accessor {
|
|||||||
#[allow(clippy::large_enum_variant, clippy::exhaustive_enums)]
|
#[allow(clippy::large_enum_variant, clippy::exhaustive_enums)]
|
||||||
#[derive(Clone, Debug, EventEnumFromEvent)]
|
#[derive(Clone, Debug, EventEnumFromEvent)]
|
||||||
pub enum AnyRoomEvent {
|
pub enum AnyRoomEvent {
|
||||||
/// Any message-like event.
|
/// Any message-like event (unredacted).
|
||||||
MessageLike(AnyMessageLikeEvent),
|
OriginalMessageLike(AnyOriginalMessageLikeEvent),
|
||||||
|
|
||||||
/// Any state event.
|
/// Any state event (unredacted).
|
||||||
State(AnyStateEvent),
|
OriginalState(AnyOriginalStateEvent),
|
||||||
|
|
||||||
/// Any message-like event that has been redacted.
|
/// Any message-like event that has been redacted.
|
||||||
RedactedMessageLike(AnyRedactedMessageLikeEvent),
|
RedactedMessageLike(AnyRedactedMessageLikeEvent),
|
||||||
@ -169,11 +169,11 @@ impl AnyRoomEvent {
|
|||||||
#[allow(clippy::large_enum_variant, clippy::exhaustive_enums)]
|
#[allow(clippy::large_enum_variant, clippy::exhaustive_enums)]
|
||||||
#[derive(Clone, Debug, EventEnumFromEvent)]
|
#[derive(Clone, Debug, EventEnumFromEvent)]
|
||||||
pub enum AnySyncRoomEvent {
|
pub enum AnySyncRoomEvent {
|
||||||
/// Any sync message-like event.
|
/// Any sync message-like event (unredacted).
|
||||||
MessageLike(AnySyncMessageLikeEvent),
|
OriginalMessageLike(AnyOriginalSyncMessageLikeEvent),
|
||||||
|
|
||||||
/// Any sync state event.
|
/// Any sync state event (unredacted).
|
||||||
State(AnySyncStateEvent),
|
OriginalState(AnyOriginalSyncStateEvent),
|
||||||
|
|
||||||
/// Any sync message-like event that has been redacted.
|
/// Any sync message-like event that has been redacted.
|
||||||
RedactedMessageLike(AnyRedactedSyncMessageLikeEvent),
|
RedactedMessageLike(AnyRedactedSyncMessageLikeEvent),
|
||||||
@ -190,8 +190,10 @@ impl AnySyncRoomEvent {
|
|||||||
/// Converts `self` to an `AnyRoomEvent` by adding the given a room ID.
|
/// Converts `self` to an `AnyRoomEvent` by adding the given a room ID.
|
||||||
pub fn into_full_event(self, room_id: Box<RoomId>) -> AnyRoomEvent {
|
pub fn into_full_event(self, room_id: Box<RoomId>) -> AnyRoomEvent {
|
||||||
match self {
|
match self {
|
||||||
Self::MessageLike(ev) => AnyRoomEvent::MessageLike(ev.into_full_event(room_id)),
|
Self::OriginalMessageLike(ev) => {
|
||||||
Self::State(ev) => AnyRoomEvent::State(ev.into_full_event(room_id)),
|
AnyRoomEvent::OriginalMessageLike(ev.into_full_event(room_id))
|
||||||
|
}
|
||||||
|
Self::OriginalState(ev) => AnyRoomEvent::OriginalState(ev.into_full_event(room_id)),
|
||||||
Self::RedactedMessageLike(ev) => {
|
Self::RedactedMessageLike(ev) => {
|
||||||
AnyRoomEvent::RedactedMessageLike(ev.into_full_event(room_id))
|
AnyRoomEvent::RedactedMessageLike(ev.into_full_event(room_id))
|
||||||
}
|
}
|
||||||
@ -220,14 +222,14 @@ impl<'de> Deserialize<'de> for AnyRoomEvent {
|
|||||||
Some(unsigned) if unsigned.redacted_because.is_some() => {
|
Some(unsigned) if unsigned.redacted_because.is_some() => {
|
||||||
AnyRoomEvent::RedactedState(from_raw_json_value(&json)?)
|
AnyRoomEvent::RedactedState(from_raw_json_value(&json)?)
|
||||||
}
|
}
|
||||||
_ => AnyRoomEvent::State(from_raw_json_value(&json)?),
|
_ => AnyRoomEvent::OriginalState(from_raw_json_value(&json)?),
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
Ok(match unsigned {
|
Ok(match unsigned {
|
||||||
Some(unsigned) if unsigned.redacted_because.is_some() => {
|
Some(unsigned) if unsigned.redacted_because.is_some() => {
|
||||||
AnyRoomEvent::RedactedMessageLike(from_raw_json_value(&json)?)
|
AnyRoomEvent::RedactedMessageLike(from_raw_json_value(&json)?)
|
||||||
}
|
}
|
||||||
_ => AnyRoomEvent::MessageLike(from_raw_json_value(&json)?),
|
_ => AnyRoomEvent::OriginalMessageLike(from_raw_json_value(&json)?),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -246,14 +248,14 @@ impl<'de> Deserialize<'de> for AnySyncRoomEvent {
|
|||||||
Some(unsigned) if unsigned.redacted_because.is_some() => {
|
Some(unsigned) if unsigned.redacted_because.is_some() => {
|
||||||
AnySyncRoomEvent::RedactedState(from_raw_json_value(&json)?)
|
AnySyncRoomEvent::RedactedState(from_raw_json_value(&json)?)
|
||||||
}
|
}
|
||||||
_ => AnySyncRoomEvent::State(from_raw_json_value(&json)?),
|
_ => AnySyncRoomEvent::OriginalState(from_raw_json_value(&json)?),
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
Ok(match unsigned {
|
Ok(match unsigned {
|
||||||
Some(unsigned) if unsigned.redacted_because.is_some() => {
|
Some(unsigned) if unsigned.redacted_because.is_some() => {
|
||||||
AnySyncRoomEvent::RedactedMessageLike(from_raw_json_value(&json)?)
|
AnySyncRoomEvent::RedactedMessageLike(from_raw_json_value(&json)?)
|
||||||
}
|
}
|
||||||
_ => AnySyncRoomEvent::MessageLike(from_raw_json_value(&json)?),
|
_ => AnySyncRoomEvent::OriginalMessageLike(from_raw_json_value(&json)?),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -276,12 +278,18 @@ impl Redact for AnyRoomEvent {
|
|||||||
/// Redacts `self`, referencing the given event in `unsigned.redacted_because`.
|
/// Redacts `self`, referencing the given event in `unsigned.redacted_because`.
|
||||||
///
|
///
|
||||||
/// Does nothing for events that are already redacted.
|
/// Does nothing for events that are already redacted.
|
||||||
fn redact(self, redaction: SyncRoomRedactionEvent, version: &RoomVersionId) -> Self::Redacted {
|
fn redact(
|
||||||
|
self,
|
||||||
|
redaction: OriginalSyncRoomRedactionEvent,
|
||||||
|
version: &RoomVersionId,
|
||||||
|
) -> Self::Redacted {
|
||||||
match self {
|
match self {
|
||||||
Self::MessageLike(ev) => Self::Redacted::MessageLike(ev.redact(redaction, version)),
|
Self::OriginalMessageLike(ev) => {
|
||||||
Self::State(ev) => Self::Redacted::State(ev.redact(redaction, version)),
|
AnyRedactedRoomEvent::MessageLike(ev.redact(redaction, version))
|
||||||
Self::RedactedMessageLike(ev) => Self::Redacted::MessageLike(ev),
|
}
|
||||||
Self::RedactedState(ev) => Self::Redacted::State(ev),
|
Self::OriginalState(ev) => AnyRedactedRoomEvent::State(ev.redact(redaction, version)),
|
||||||
|
Self::RedactedMessageLike(ev) => AnyRedactedRoomEvent::MessageLike(ev),
|
||||||
|
Self::RedactedState(ev) => AnyRedactedRoomEvent::State(ev),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -312,12 +320,20 @@ impl Redact for AnySyncRoomEvent {
|
|||||||
/// Redacts `self`, referencing the given event in `unsigned.redacted_because`.
|
/// Redacts `self`, referencing the given event in `unsigned.redacted_because`.
|
||||||
///
|
///
|
||||||
/// Does nothing for events that are already redacted.
|
/// Does nothing for events that are already redacted.
|
||||||
fn redact(self, redaction: SyncRoomRedactionEvent, version: &RoomVersionId) -> Self::Redacted {
|
fn redact(
|
||||||
|
self,
|
||||||
|
redaction: OriginalSyncRoomRedactionEvent,
|
||||||
|
version: &RoomVersionId,
|
||||||
|
) -> AnyRedactedSyncRoomEvent {
|
||||||
match self {
|
match self {
|
||||||
Self::MessageLike(ev) => Self::Redacted::MessageLike(ev.redact(redaction, version)),
|
Self::OriginalMessageLike(ev) => {
|
||||||
Self::State(ev) => Self::Redacted::State(ev.redact(redaction, version)),
|
AnyRedactedSyncRoomEvent::MessageLike(ev.redact(redaction, version))
|
||||||
Self::RedactedMessageLike(ev) => Self::Redacted::MessageLike(ev),
|
}
|
||||||
Self::RedactedState(ev) => Self::Redacted::State(ev),
|
Self::OriginalState(ev) => {
|
||||||
|
AnyRedactedSyncRoomEvent::State(ev.redact(redaction, version))
|
||||||
|
}
|
||||||
|
Self::RedactedMessageLike(ev) => AnyRedactedSyncRoomEvent::MessageLike(ev),
|
||||||
|
Self::RedactedState(ev) => AnyRedactedSyncRoomEvent::State(ev),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,10 +44,10 @@ pub struct SyncEphemeralRoomEvent<C: EphemeralRoomEventContent> {
|
|||||||
|
|
||||||
/// A message-like event.
|
/// A message-like event.
|
||||||
///
|
///
|
||||||
/// `MessageLikeEvent` implements the comparison traits using only the `event_id` field, a sorted
|
/// `OriginalMessageLikeEvent` implements the comparison traits using only the `event_id` field, a
|
||||||
/// list would be sorted lexicographically based on the event's `EventId`.
|
/// sorted list would be sorted lexicographically based on the event's `EventId`.
|
||||||
#[derive(Clone, Debug, Event)]
|
#[derive(Clone, Debug, Event)]
|
||||||
pub struct MessageLikeEvent<C: MessageLikeEventContent> {
|
pub struct OriginalMessageLikeEvent<C: MessageLikeEventContent> {
|
||||||
/// Data specific to the event type.
|
/// Data specific to the event type.
|
||||||
pub content: C,
|
pub content: C,
|
||||||
|
|
||||||
@ -69,10 +69,10 @@ pub struct MessageLikeEvent<C: MessageLikeEventContent> {
|
|||||||
|
|
||||||
/// A message-like event without a `room_id`.
|
/// A message-like event without a `room_id`.
|
||||||
///
|
///
|
||||||
/// `SyncMessageLikeEvent` implements the comparison traits using only the `event_id` field, a
|
/// `OriginalSyncMessageLikeEvent` implements the comparison traits using only the `event_id` field,
|
||||||
/// sorted list would be sorted lexicographically based on the event's `EventId`.
|
/// a sorted list would be sorted lexicographically based on the event's `EventId`.
|
||||||
#[derive(Clone, Debug, Event)]
|
#[derive(Clone, Debug, Event)]
|
||||||
pub struct SyncMessageLikeEvent<C: MessageLikeEventContent> {
|
pub struct OriginalSyncMessageLikeEvent<C: MessageLikeEventContent> {
|
||||||
/// Data specific to the event type.
|
/// Data specific to the event type.
|
||||||
pub content: C,
|
pub content: C,
|
||||||
|
|
||||||
@ -138,10 +138,10 @@ pub struct RedactedSyncMessageLikeEvent<C: RedactedMessageLikeEventContent> {
|
|||||||
|
|
||||||
/// A state event.
|
/// A state event.
|
||||||
///
|
///
|
||||||
/// `StateEvent` implements the comparison traits using only the `event_id` field, a sorted list
|
/// `OriginalStateEvent` implements the comparison traits using only the `event_id` field, a sorted
|
||||||
/// would be sorted lexicographically based on the event's `EventId`.
|
/// list would be sorted lexicographically based on the event's `EventId`.
|
||||||
#[derive(Clone, Debug, Event)]
|
#[derive(Clone, Debug, Event)]
|
||||||
pub struct StateEvent<C: StateEventContent> {
|
pub struct OriginalStateEvent<C: StateEventContent> {
|
||||||
/// Data specific to the event type.
|
/// Data specific to the event type.
|
||||||
pub content: C,
|
pub content: C,
|
||||||
|
|
||||||
@ -169,10 +169,10 @@ pub struct StateEvent<C: StateEventContent> {
|
|||||||
|
|
||||||
/// A state event without a `room_id`.
|
/// A state event without a `room_id`.
|
||||||
///
|
///
|
||||||
/// `SyncStateEvent` implements the comparison traits using only the `event_id` field, a sorted list
|
/// `OriginalSyncStateEvent` implements the comparison traits using only the `event_id` field, a
|
||||||
/// would be sorted lexicographically based on the event's `EventId`.
|
/// sorted list would be sorted lexicographically based on the event's `EventId`.
|
||||||
#[derive(Clone, Debug, Event)]
|
#[derive(Clone, Debug, Event)]
|
||||||
pub struct SyncStateEvent<C: StateEventContent> {
|
pub struct OriginalSyncStateEvent<C: StateEventContent> {
|
||||||
/// Data specific to the event type.
|
/// Data specific to the event type.
|
||||||
pub content: C,
|
pub content: C,
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ mod tests {
|
|||||||
use js_int::int;
|
use js_int::int;
|
||||||
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
||||||
|
|
||||||
use super::{PolicyRuleRoomEvent, PolicyRuleRoomEventContent};
|
use super::{OriginalPolicyRuleRoomEvent, PolicyRuleRoomEventContent};
|
||||||
use crate::{
|
use crate::{
|
||||||
event_id,
|
event_id,
|
||||||
events::{
|
events::{
|
||||||
@ -36,7 +36,7 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn serialization() {
|
fn serialization() {
|
||||||
let room_event = PolicyRuleRoomEvent {
|
let room_event = OriginalPolicyRuleRoomEvent {
|
||||||
event_id: event_id!("$143273582443PhrSn:example.org").to_owned(),
|
event_id: event_id!("$143273582443PhrSn:example.org").to_owned(),
|
||||||
sender: user_id!("@example:example.org").to_owned(),
|
sender: user_id!("@example:example.org").to_owned(),
|
||||||
origin_server_ts: MilliSecondsSinceUnixEpoch(1_432_735_824_653_u64.try_into().unwrap()),
|
origin_server_ts: MilliSecondsSinceUnixEpoch(1_432_735_824_653_u64.try_into().unwrap()),
|
||||||
@ -89,6 +89,9 @@ mod tests {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
assert!(from_json_value::<Raw<PolicyRuleRoomEvent>>(json).unwrap().deserialize().is_ok());
|
assert!(from_json_value::<Raw<OriginalPolicyRuleRoomEvent>>(json)
|
||||||
|
.unwrap()
|
||||||
|
.deserialize()
|
||||||
|
.is_ok());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ use std::fmt::Debug;
|
|||||||
use js_int::UInt;
|
use js_int::UInt;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use super::AnySyncMessageLikeEvent;
|
use super::AnyOriginalSyncMessageLikeEvent;
|
||||||
use crate::{serde::Raw, EventId, MilliSecondsSinceUnixEpoch, UserId};
|
use crate::{serde::Raw, EventId, MilliSecondsSinceUnixEpoch, UserId};
|
||||||
|
|
||||||
/// Summary of all reactions with the given key to an event.
|
/// Summary of all reactions with the given key to an event.
|
||||||
@ -98,7 +98,7 @@ impl BundledReplacement {
|
|||||||
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
|
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
|
||||||
pub struct BundledThread {
|
pub struct BundledThread {
|
||||||
/// The latest event in the thread.
|
/// The latest event in the thread.
|
||||||
pub latest_event: Box<Raw<AnySyncMessageLikeEvent>>,
|
pub latest_event: Box<Raw<AnyOriginalSyncMessageLikeEvent>>,
|
||||||
|
|
||||||
/// The number of events in the thread.
|
/// The number of events in the thread.
|
||||||
pub count: UInt,
|
pub count: UInt,
|
||||||
@ -111,7 +111,7 @@ pub struct BundledThread {
|
|||||||
impl BundledThread {
|
impl BundledThread {
|
||||||
/// Creates a new `BundledThread` with the given event, count and user participated flag.
|
/// Creates a new `BundledThread` with the given event, count and user participated flag.
|
||||||
pub fn new(
|
pub fn new(
|
||||||
latest_event: Box<Raw<AnySyncMessageLikeEvent>>,
|
latest_event: Box<Raw<AnyOriginalSyncMessageLikeEvent>>,
|
||||||
count: UInt,
|
count: UInt,
|
||||||
current_user_participated: bool,
|
current_user_participated: bool,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
|
@ -44,11 +44,11 @@ mod tests {
|
|||||||
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
||||||
|
|
||||||
use super::RoomCanonicalAliasEventContent;
|
use super::RoomCanonicalAliasEventContent;
|
||||||
use crate::events::{StateEvent, StateUnsigned};
|
use crate::events::{OriginalStateEvent, StateUnsigned};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn serialization_with_optional_fields_as_none() {
|
fn serialization_with_optional_fields_as_none() {
|
||||||
let canonical_alias_event = StateEvent {
|
let canonical_alias_event = OriginalStateEvent {
|
||||||
content: RoomCanonicalAliasEventContent {
|
content: RoomCanonicalAliasEventContent {
|
||||||
alias: Some(room_alias_id!("#somewhere:localhost").to_owned()),
|
alias: Some(room_alias_id!("#somewhere:localhost").to_owned()),
|
||||||
alt_aliases: Vec::new(),
|
alt_aliases: Vec::new(),
|
||||||
@ -90,7 +90,7 @@ mod tests {
|
|||||||
});
|
});
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
from_json_value::<StateEvent<RoomCanonicalAliasEventContent>>(json_data)
|
from_json_value::<OriginalStateEvent<RoomCanonicalAliasEventContent>>(json_data)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.content
|
.content
|
||||||
.alias,
|
.alias,
|
||||||
@ -112,7 +112,7 @@ mod tests {
|
|||||||
"type": "m.room.canonical_alias"
|
"type": "m.room.canonical_alias"
|
||||||
});
|
});
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
from_json_value::<StateEvent<RoomCanonicalAliasEventContent>>(json_data)
|
from_json_value::<OriginalStateEvent<RoomCanonicalAliasEventContent>>(json_data)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.content
|
.content
|
||||||
.alias,
|
.alias,
|
||||||
@ -134,7 +134,7 @@ mod tests {
|
|||||||
"type": "m.room.canonical_alias"
|
"type": "m.room.canonical_alias"
|
||||||
});
|
});
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
from_json_value::<StateEvent<RoomCanonicalAliasEventContent>>(json_data)
|
from_json_value::<OriginalStateEvent<RoomCanonicalAliasEventContent>>(json_data)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.content
|
.content
|
||||||
.alias,
|
.alias,
|
||||||
@ -157,7 +157,7 @@ mod tests {
|
|||||||
"type": "m.room.canonical_alias"
|
"type": "m.room.canonical_alias"
|
||||||
});
|
});
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
from_json_value::<StateEvent<RoomCanonicalAliasEventContent>>(json_data)
|
from_json_value::<OriginalStateEvent<RoomCanonicalAliasEventContent>>(json_data)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.content
|
.content
|
||||||
.alias,
|
.alias,
|
||||||
|
@ -221,7 +221,7 @@ mod tests {
|
|||||||
use crate::room_id;
|
use crate::room_id;
|
||||||
use matches::assert_matches;
|
use matches::assert_matches;
|
||||||
|
|
||||||
use super::{AllowRule, JoinRule, RoomJoinRulesEventContent, SyncRoomJoinRulesEvent};
|
use super::{AllowRule, JoinRule, OriginalSyncRoomJoinRulesEvent, RoomJoinRulesEventContent};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn deserialize() {
|
fn deserialize() {
|
||||||
@ -277,6 +277,6 @@ mod tests {
|
|||||||
"event_id": "$0ACb9KSPlT3al3kikyRYvFhMqXPP9ZcQOBrsdIuh58U"
|
"event_id": "$0ACb9KSPlT3al3kikyRYvFhMqXPP9ZcQOBrsdIuh58U"
|
||||||
}"#;
|
}"#;
|
||||||
|
|
||||||
assert_matches!(serde_json::from_str::<SyncRoomJoinRulesEvent>(json), Ok(_));
|
assert_matches!(serde_json::from_str::<OriginalSyncRoomJoinRulesEvent>(json), Ok(_));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,8 +10,8 @@ use serde_json::value::RawValue as RawJsonValue;
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
events::{
|
events::{
|
||||||
EventContent, HasDeserializeFields, RedactContent, RedactedEventContent, StateEventType,
|
EventContent, HasDeserializeFields, OriginalSyncStateEvent, RedactContent,
|
||||||
StrippedStateEvent, SyncStateEvent,
|
RedactedEventContent, StateEventType, StrippedStateEvent,
|
||||||
},
|
},
|
||||||
serde::StringEnum,
|
serde::StringEnum,
|
||||||
MxcUri, PrivOwnedStr, RoomVersionId, ServerName, ServerSigningKeyId, UserId,
|
MxcUri, PrivOwnedStr, RoomVersionId, ServerName, ServerSigningKeyId, UserId,
|
||||||
@ -377,7 +377,7 @@ fn membership_change(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RoomMemberEvent {
|
impl OriginalRoomMemberEvent {
|
||||||
/// Helper function for membership change.
|
/// Helper function for membership change.
|
||||||
///
|
///
|
||||||
/// Check [the specification][spec] for details.
|
/// Check [the specification][spec] for details.
|
||||||
@ -393,7 +393,7 @@ impl RoomMemberEvent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SyncStateEvent<RoomMemberEventContent> {
|
impl OriginalSyncStateEvent<RoomMemberEventContent> {
|
||||||
/// Helper function for membership change.
|
/// Helper function for membership change.
|
||||||
///
|
///
|
||||||
/// Check [the specification][spec] for details.
|
/// Check [the specification][spec] for details.
|
||||||
@ -429,7 +429,7 @@ mod tests {
|
|||||||
use serde_json::{from_value as from_json_value, json};
|
use serde_json::{from_value as from_json_value, json};
|
||||||
|
|
||||||
use super::{MembershipState, RoomMemberEventContent, SignedContent, ThirdPartyInvite};
|
use super::{MembershipState, RoomMemberEventContent, SignedContent, ThirdPartyInvite};
|
||||||
use crate::events::{StateEvent, StateUnsigned};
|
use crate::events::{OriginalStateEvent, StateUnsigned};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn serde_with_no_prev_content() {
|
fn serde_with_no_prev_content() {
|
||||||
@ -446,8 +446,8 @@ mod tests {
|
|||||||
});
|
});
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<StateEvent<RoomMemberEventContent>>(json).unwrap(),
|
from_json_value::<OriginalStateEvent<RoomMemberEventContent>>(json).unwrap(),
|
||||||
StateEvent {
|
OriginalStateEvent {
|
||||||
content: RoomMemberEventContent {
|
content: RoomMemberEventContent {
|
||||||
avatar_url: None,
|
avatar_url: None,
|
||||||
displayname: None,
|
displayname: None,
|
||||||
@ -490,7 +490,7 @@ mod tests {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
let ev = from_json_value::<StateEvent<RoomMemberEventContent>>(json).unwrap();
|
let ev = from_json_value::<OriginalStateEvent<RoomMemberEventContent>>(json).unwrap();
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
ev.content,
|
ev.content,
|
||||||
@ -556,8 +556,8 @@ mod tests {
|
|||||||
});
|
});
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<StateEvent<RoomMemberEventContent>>(json).unwrap(),
|
from_json_value::<OriginalStateEvent<RoomMemberEventContent>>(json).unwrap(),
|
||||||
StateEvent {
|
OriginalStateEvent {
|
||||||
content: RoomMemberEventContent {
|
content: RoomMemberEventContent {
|
||||||
avatar_url: Some(avatar_url),
|
avatar_url: Some(avatar_url),
|
||||||
displayname: Some(displayname),
|
displayname: Some(displayname),
|
||||||
@ -629,8 +629,8 @@ mod tests {
|
|||||||
});
|
});
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<StateEvent<RoomMemberEventContent>>(json).unwrap(),
|
from_json_value::<OriginalStateEvent<RoomMemberEventContent>>(json).unwrap(),
|
||||||
StateEvent {
|
OriginalStateEvent {
|
||||||
content: RoomMemberEventContent {
|
content: RoomMemberEventContent {
|
||||||
avatar_url: None,
|
avatar_url: None,
|
||||||
displayname: None,
|
displayname: None,
|
||||||
@ -692,8 +692,8 @@ mod tests {
|
|||||||
});
|
});
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<StateEvent<RoomMemberEventContent>>(json).unwrap(),
|
from_json_value::<OriginalStateEvent<RoomMemberEventContent>>(json).unwrap(),
|
||||||
StateEvent {
|
OriginalStateEvent {
|
||||||
content: RoomMemberEventContent {
|
content: RoomMemberEventContent {
|
||||||
avatar_url: None,
|
avatar_url: None,
|
||||||
displayname: None,
|
displayname: None,
|
||||||
|
@ -127,11 +127,11 @@ impl RoomMessageEventContent {
|
|||||||
/// [`RoomMessageEvent`] since it creates a permalink to the previous message, for which the
|
/// [`RoomMessageEvent`] since it creates a permalink to the previous message, for which the
|
||||||
/// room ID is required. If you want to reply to a [`SyncRoomMessageEvent`], you have to convert
|
/// room ID is required. If you want to reply to a [`SyncRoomMessageEvent`], you have to convert
|
||||||
/// it first by calling
|
/// it first by calling
|
||||||
/// [`.into_full_event()`][crate::events::SyncMessageLikeEvent::into_full_event].
|
/// [`.into_full_event()`][crate::events::OriginalSyncMessageLikeEvent::into_full_event].
|
||||||
pub fn text_reply_html(
|
pub fn text_reply_html(
|
||||||
reply: impl fmt::Display,
|
reply: impl fmt::Display,
|
||||||
html_reply: impl fmt::Display,
|
html_reply: impl fmt::Display,
|
||||||
original_message: &RoomMessageEvent,
|
original_message: &OriginalRoomMessageEvent,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let quoted = reply::get_plain_quote_fallback(original_message);
|
let quoted = reply::get_plain_quote_fallback(original_message);
|
||||||
let quoted_html = reply::get_html_quote_fallback(original_message);
|
let quoted_html = reply::get_html_quote_fallback(original_message);
|
||||||
@ -169,11 +169,11 @@ impl RoomMessageEventContent {
|
|||||||
/// [`RoomMessageEvent`] since it creates a permalink to the previous message, for which the
|
/// [`RoomMessageEvent`] since it creates a permalink to the previous message, for which the
|
||||||
/// room ID is required. If you want to reply to a [`SyncRoomMessageEvent`], you have to convert
|
/// room ID is required. If you want to reply to a [`SyncRoomMessageEvent`], you have to convert
|
||||||
/// it first by calling
|
/// it first by calling
|
||||||
/// [`.into_full_event()`][crate::events::SyncMessageLikeEvent::into_full_event].
|
/// [`.into_full_event()`][crate::events::OriginalSyncMessageLikeEvent::into_full_event].
|
||||||
pub fn notice_reply_html(
|
pub fn notice_reply_html(
|
||||||
reply: impl fmt::Display,
|
reply: impl fmt::Display,
|
||||||
html_reply: impl fmt::Display,
|
html_reply: impl fmt::Display,
|
||||||
original_message: &RoomMessageEvent,
|
original_message: &OriginalRoomMessageEvent,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let quoted = reply::get_plain_quote_fallback(original_message);
|
let quoted = reply::get_plain_quote_fallback(original_message);
|
||||||
let quoted_html = reply::get_html_quote_fallback(original_message);
|
let quoted_html = reply::get_html_quote_fallback(original_message);
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
use indoc::formatdoc;
|
use indoc::formatdoc;
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
FormattedBody, MessageType, RoomMessageEvent, RoomMessageEventContent, SyncRoomMessageEvent,
|
FormattedBody, MessageType, OriginalRoomMessageEvent, OriginalSyncRoomMessageEvent,
|
||||||
|
RoomMessageEventContent,
|
||||||
};
|
};
|
||||||
use crate::{EventId, UserId};
|
use crate::{EventId, UserId};
|
||||||
|
|
||||||
@ -21,7 +22,7 @@ pub trait ReplyBaseEvent {
|
|||||||
fn content(&self) -> &RoomMessageEventContent;
|
fn content(&self) -> &RoomMessageEventContent;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ReplyBaseEvent for RoomMessageEvent {
|
impl ReplyBaseEvent for OriginalRoomMessageEvent {
|
||||||
fn event_id(&self) -> &EventId {
|
fn event_id(&self) -> &EventId {
|
||||||
&self.event_id
|
&self.event_id
|
||||||
}
|
}
|
||||||
@ -35,7 +36,7 @@ impl ReplyBaseEvent for RoomMessageEvent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ReplyBaseEvent for SyncRoomMessageEvent {
|
impl ReplyBaseEvent for OriginalSyncRoomMessageEvent {
|
||||||
fn event_id(&self) -> &EventId {
|
fn event_id(&self) -> &EventId {
|
||||||
&self.event_id
|
&self.event_id
|
||||||
}
|
}
|
||||||
@ -91,7 +92,7 @@ pub fn get_plain_quote_fallback(original_message: &impl ReplyBaseEvent) -> Strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[allow(clippy::nonstandard_macro_braces)]
|
#[allow(clippy::nonstandard_macro_braces)]
|
||||||
pub fn get_html_quote_fallback(original_message: &RoomMessageEvent) -> String {
|
pub fn get_html_quote_fallback(original_message: &OriginalRoomMessageEvent) -> String {
|
||||||
match &original_message.content.msgtype {
|
match &original_message.content.msgtype {
|
||||||
MessageType::Audio(_) => {
|
MessageType::Audio(_) => {
|
||||||
formatdoc!(
|
formatdoc!(
|
||||||
@ -303,12 +304,12 @@ mod tests {
|
|||||||
event_id, events::MessageLikeUnsigned, room_id, user_id, MilliSecondsSinceUnixEpoch,
|
event_id, events::MessageLikeUnsigned, room_id, user_id, MilliSecondsSinceUnixEpoch,
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::{RoomMessageEvent, RoomMessageEventContent};
|
use super::{OriginalRoomMessageEvent, RoomMessageEventContent};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn plain_quote_fallback_multiline() {
|
fn plain_quote_fallback_multiline() {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
super::get_plain_quote_fallback(&RoomMessageEvent {
|
super::get_plain_quote_fallback(&OriginalRoomMessageEvent {
|
||||||
content: RoomMessageEventContent::text_plain("multi\nline"),
|
content: RoomMessageEventContent::text_plain("multi\nline"),
|
||||||
event_id: event_id!("$1598361704261elfgc:localhost").to_owned(),
|
event_id: event_id!("$1598361704261elfgc:localhost").to_owned(),
|
||||||
sender: user_id!("@alice:example.com").to_owned(),
|
sender: user_id!("@alice:example.com").to_owned(),
|
||||||
|
@ -36,11 +36,11 @@ mod tests {
|
|||||||
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
use serde_json::{from_value as from_json_value, json, to_value as to_json_value};
|
||||||
|
|
||||||
use super::RoomNameEventContent;
|
use super::RoomNameEventContent;
|
||||||
use crate::events::{StateEvent, StateUnsigned};
|
use crate::events::{OriginalStateEvent, StateUnsigned};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn serialization_with_optional_fields_as_none() {
|
fn serialization_with_optional_fields_as_none() {
|
||||||
let name_event = StateEvent {
|
let name_event = OriginalStateEvent {
|
||||||
content: RoomNameEventContent { name: "The room name".try_into().ok() },
|
content: RoomNameEventContent { name: "The room name".try_into().ok() },
|
||||||
event_id: event_id!("$h29iv0s8:example.com").to_owned(),
|
event_id: event_id!("$h29iv0s8:example.com").to_owned(),
|
||||||
origin_server_ts: MilliSecondsSinceUnixEpoch(uint!(1)),
|
origin_server_ts: MilliSecondsSinceUnixEpoch(uint!(1)),
|
||||||
@ -68,7 +68,7 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn serialization_with_all_fields() {
|
fn serialization_with_all_fields() {
|
||||||
let name_event = StateEvent {
|
let name_event = OriginalStateEvent {
|
||||||
content: RoomNameEventContent { name: "The room name".try_into().ok() },
|
content: RoomNameEventContent { name: "The room name".try_into().ok() },
|
||||||
event_id: event_id!("$h29iv0s8:example.com").to_owned(),
|
event_id: event_id!("$h29iv0s8:example.com").to_owned(),
|
||||||
origin_server_ts: MilliSecondsSinceUnixEpoch(uint!(1)),
|
origin_server_ts: MilliSecondsSinceUnixEpoch(uint!(1)),
|
||||||
@ -114,7 +114,10 @@ mod tests {
|
|||||||
"type": "m.room.name"
|
"type": "m.room.name"
|
||||||
});
|
});
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
from_json_value::<StateEvent<RoomNameEventContent>>(json_data).unwrap().content.name,
|
from_json_value::<OriginalStateEvent<RoomNameEventContent>>(json_data)
|
||||||
|
.unwrap()
|
||||||
|
.content
|
||||||
|
.name,
|
||||||
None
|
None
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -161,7 +164,10 @@ mod tests {
|
|||||||
"type": "m.room.name"
|
"type": "m.room.name"
|
||||||
});
|
});
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
from_json_value::<StateEvent<RoomNameEventContent>>(json_data).unwrap().content.name,
|
from_json_value::<OriginalStateEvent<RoomNameEventContent>>(json_data)
|
||||||
|
.unwrap()
|
||||||
|
.content
|
||||||
|
.name,
|
||||||
None
|
None
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -180,7 +186,10 @@ mod tests {
|
|||||||
"type": "m.room.name"
|
"type": "m.room.name"
|
||||||
});
|
});
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
from_json_value::<StateEvent<RoomNameEventContent>>(json_data).unwrap().content.name,
|
from_json_value::<OriginalStateEvent<RoomNameEventContent>>(json_data)
|
||||||
|
.unwrap()
|
||||||
|
.content
|
||||||
|
.name,
|
||||||
None
|
None
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -201,7 +210,10 @@ mod tests {
|
|||||||
});
|
});
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
from_json_value::<StateEvent<RoomNameEventContent>>(json_data).unwrap().content.name,
|
from_json_value::<OriginalStateEvent<RoomNameEventContent>>(json_data)
|
||||||
|
.unwrap()
|
||||||
|
.content
|
||||||
|
.name,
|
||||||
name
|
name
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ mod tests {
|
|||||||
use crate::{server_name, EventId, MilliSecondsSinceUnixEpoch, RoomId, UserId};
|
use crate::{server_name, EventId, MilliSecondsSinceUnixEpoch, RoomId, UserId};
|
||||||
|
|
||||||
use super::RoomPinnedEventsEventContent;
|
use super::RoomPinnedEventsEventContent;
|
||||||
use crate::events::{StateEvent, StateUnsigned};
|
use crate::events::{OriginalStateEvent, StateUnsigned};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn serialization_deserialization() {
|
fn serialization_deserialization() {
|
||||||
@ -43,7 +43,7 @@ mod tests {
|
|||||||
content.pinned.push(EventId::new(server_name));
|
content.pinned.push(EventId::new(server_name));
|
||||||
content.pinned.push(EventId::new(server_name));
|
content.pinned.push(EventId::new(server_name));
|
||||||
|
|
||||||
let event = StateEvent {
|
let event = OriginalStateEvent {
|
||||||
content: content.clone(),
|
content: content.clone(),
|
||||||
event_id: EventId::new(server_name),
|
event_id: EventId::new(server_name),
|
||||||
origin_server_ts: MilliSecondsSinceUnixEpoch(1_432_804_485_886_u64.try_into().unwrap()),
|
origin_server_ts: MilliSecondsSinceUnixEpoch(1_432_804_485_886_u64.try_into().unwrap()),
|
||||||
@ -54,7 +54,7 @@ mod tests {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let serialized_event = serde_json::to_string(&event).unwrap();
|
let serialized_event = serde_json::to_string(&event).unwrap();
|
||||||
let parsed_event: StateEvent<RoomPinnedEventsEventContent> =
|
let parsed_event: OriginalStateEvent<RoomPinnedEventsEventContent> =
|
||||||
serde_json::from_str(&serialized_event).unwrap();
|
serde_json::from_str(&serialized_event).unwrap();
|
||||||
|
|
||||||
assert_eq!(parsed_event.event_id, event.event_id);
|
assert_eq!(parsed_event.event_id, event.event_id);
|
||||||
|
@ -182,13 +182,13 @@ mod tests {
|
|||||||
use serde_json::{json, to_value as to_json_value};
|
use serde_json::{json, to_value as to_json_value};
|
||||||
|
|
||||||
use super::{default_power_level, NotificationPowerLevels, RoomPowerLevelsEventContent};
|
use super::{default_power_level, NotificationPowerLevels, RoomPowerLevelsEventContent};
|
||||||
use crate::events::{StateEvent, StateUnsigned};
|
use crate::events::{OriginalStateEvent, StateUnsigned};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn serialization_with_optional_fields_as_none() {
|
fn serialization_with_optional_fields_as_none() {
|
||||||
let default = default_power_level();
|
let default = default_power_level();
|
||||||
|
|
||||||
let power_levels_event = StateEvent {
|
let power_levels_event = OriginalStateEvent {
|
||||||
content: RoomPowerLevelsEventContent {
|
content: RoomPowerLevelsEventContent {
|
||||||
ban: default,
|
ban: default,
|
||||||
events: BTreeMap::new(),
|
events: BTreeMap::new(),
|
||||||
@ -226,7 +226,7 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn serialization_with_all_fields() {
|
fn serialization_with_all_fields() {
|
||||||
let user = user_id!("@carl:example.com");
|
let user = user_id!("@carl:example.com");
|
||||||
let power_levels_event = StateEvent {
|
let power_levels_event = OriginalStateEvent {
|
||||||
content: RoomPowerLevelsEventContent {
|
content: RoomPowerLevelsEventContent {
|
||||||
ban: int!(23),
|
ban: int!(23),
|
||||||
events: btreemap! {
|
events: btreemap! {
|
||||||
|
@ -13,7 +13,7 @@ use crate::{
|
|||||||
/// Redaction event.
|
/// Redaction event.
|
||||||
#[derive(Clone, Debug, Event)]
|
#[derive(Clone, Debug, Event)]
|
||||||
#[allow(clippy::exhaustive_structs)]
|
#[allow(clippy::exhaustive_structs)]
|
||||||
pub struct RoomRedactionEvent {
|
pub struct OriginalRoomRedactionEvent {
|
||||||
/// Data specific to the event type.
|
/// Data specific to the event type.
|
||||||
pub content: RoomRedactionEventContent,
|
pub content: RoomRedactionEventContent,
|
||||||
|
|
||||||
@ -36,12 +36,12 @@ pub struct RoomRedactionEvent {
|
|||||||
pub unsigned: MessageLikeUnsigned,
|
pub unsigned: MessageLikeUnsigned,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Redact for RoomRedactionEvent {
|
impl Redact for OriginalRoomRedactionEvent {
|
||||||
type Redacted = RedactedRoomRedactionEvent;
|
type Redacted = RedactedRoomRedactionEvent;
|
||||||
|
|
||||||
fn redact(
|
fn redact(
|
||||||
self,
|
self,
|
||||||
redaction: SyncRoomRedactionEvent,
|
redaction: OriginalSyncRoomRedactionEvent,
|
||||||
version: &crate::RoomVersionId,
|
version: &crate::RoomVersionId,
|
||||||
) -> Self::Redacted {
|
) -> Self::Redacted {
|
||||||
RedactedRoomRedactionEvent {
|
RedactedRoomRedactionEvent {
|
||||||
@ -86,7 +86,7 @@ pub struct RedactedRoomRedactionEvent {
|
|||||||
/// Redaction event without a `room_id`.
|
/// Redaction event without a `room_id`.
|
||||||
#[derive(Clone, Debug, Event)]
|
#[derive(Clone, Debug, Event)]
|
||||||
#[allow(clippy::exhaustive_structs)]
|
#[allow(clippy::exhaustive_structs)]
|
||||||
pub struct SyncRoomRedactionEvent {
|
pub struct OriginalSyncRoomRedactionEvent {
|
||||||
/// Data specific to the event type.
|
/// Data specific to the event type.
|
||||||
pub content: RoomRedactionEventContent,
|
pub content: RoomRedactionEventContent,
|
||||||
|
|
||||||
@ -106,12 +106,12 @@ pub struct SyncRoomRedactionEvent {
|
|||||||
pub unsigned: MessageLikeUnsigned,
|
pub unsigned: MessageLikeUnsigned,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Redact for SyncRoomRedactionEvent {
|
impl Redact for OriginalSyncRoomRedactionEvent {
|
||||||
type Redacted = RedactedSyncRoomRedactionEvent;
|
type Redacted = RedactedSyncRoomRedactionEvent;
|
||||||
|
|
||||||
fn redact(
|
fn redact(
|
||||||
self,
|
self,
|
||||||
redaction: SyncRoomRedactionEvent,
|
redaction: OriginalSyncRoomRedactionEvent,
|
||||||
version: &crate::RoomVersionId,
|
version: &crate::RoomVersionId,
|
||||||
) -> Self::Redacted {
|
) -> Self::Redacted {
|
||||||
RedactedSyncRoomRedactionEvent {
|
RedactedSyncRoomRedactionEvent {
|
||||||
|
@ -68,7 +68,7 @@ mod tests {
|
|||||||
use serde_json::{from_value as from_json_value, json};
|
use serde_json::{from_value as from_json_value, json};
|
||||||
|
|
||||||
use super::RoomServerAclEventContent;
|
use super::RoomServerAclEventContent;
|
||||||
use crate::events::StateEvent;
|
use crate::events::OriginalStateEvent;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn default_values() {
|
fn default_values() {
|
||||||
@ -82,7 +82,7 @@ mod tests {
|
|||||||
"type": "m.room.server_acl"
|
"type": "m.room.server_acl"
|
||||||
});
|
});
|
||||||
|
|
||||||
let server_acl_event: StateEvent<RoomServerAclEventContent> =
|
let server_acl_event: OriginalStateEvent<RoomServerAclEventContent> =
|
||||||
from_json_value(json_data).unwrap();
|
from_json_value(json_data).unwrap();
|
||||||
|
|
||||||
assert!(server_acl_event.content.allow_ip_literals);
|
assert!(server_acl_event.content.allow_ip_literals);
|
||||||
|
@ -4,7 +4,7 @@ use serde_json::{from_str as from_json_str, value::RawValue as RawJsonValue};
|
|||||||
|
|
||||||
#[cfg(feature = "unstable-msc2675")]
|
#[cfg(feature = "unstable-msc2675")]
|
||||||
use super::relation::Relations;
|
use super::relation::Relations;
|
||||||
use super::{room::redaction::SyncRoomRedactionEvent, StateEventContent};
|
use super::{room::redaction::OriginalSyncRoomRedactionEvent, StateEventContent};
|
||||||
use crate::{serde::Raw, TransactionId};
|
use crate::{serde::Raw, TransactionId};
|
||||||
|
|
||||||
/// Extra information about a message event that is not incorporated into the event's hash.
|
/// Extra information about a message event that is not incorporated into the event's hash.
|
||||||
@ -172,7 +172,7 @@ impl<C: StateEventContent> Default for StateUnsigned<C> {
|
|||||||
pub struct RedactedUnsigned {
|
pub struct RedactedUnsigned {
|
||||||
/// The event that redacted this event, if any.
|
/// The event that redacted this event, if any.
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub redacted_because: Option<Box<SyncRoomRedactionEvent>>,
|
pub redacted_because: Option<Box<OriginalSyncRoomRedactionEvent>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RedactedUnsigned {
|
impl RedactedUnsigned {
|
||||||
@ -182,7 +182,7 @@ impl RedactedUnsigned {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Create a new `RedactedUnsigned` with the given redacted because.
|
/// Create a new `RedactedUnsigned` with the given redacted because.
|
||||||
pub fn new_because(redacted_because: Box<SyncRoomRedactionEvent>) -> Self {
|
pub fn new_because(redacted_because: Box<OriginalSyncRoomRedactionEvent>) -> Self {
|
||||||
Self { redacted_because: Some(redacted_because) }
|
Self { redacted_because: Some(redacted_because) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ use ruma_common::{
|
|||||||
},
|
},
|
||||||
JsonWebKeyInit, MediaSource,
|
JsonWebKeyInit, MediaSource,
|
||||||
},
|
},
|
||||||
AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned,
|
AnyOriginalMessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
||||||
},
|
},
|
||||||
mxc_uri, room_id,
|
mxc_uri, room_id,
|
||||||
serde::Base64,
|
serde::Base64,
|
||||||
@ -137,7 +137,7 @@ fn encrypted_content_serialization() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn event_serialization() {
|
fn event_serialization() {
|
||||||
let event = MessageLikeEvent {
|
let event = OriginalMessageLikeEvent {
|
||||||
content: assign!(
|
content: assign!(
|
||||||
AudioEventContent::with_message(
|
AudioEventContent::with_message(
|
||||||
MessageContent::html(
|
MessageContent::html(
|
||||||
@ -349,8 +349,8 @@ fn message_event_deserialization() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnyMessageLikeEvent>(json_data).unwrap(),
|
from_json_value::<AnyOriginalMessageLikeEvent>(json_data).unwrap(),
|
||||||
AnyMessageLikeEvent::Audio(MessageLikeEvent {
|
AnyOriginalMessageLikeEvent::Audio(OriginalMessageLikeEvent {
|
||||||
content: AudioEventContent {
|
content: AudioEventContent {
|
||||||
message,
|
message,
|
||||||
file: FileContent {
|
file: FileContent {
|
||||||
|
@ -10,11 +10,12 @@ use ruma_common::{
|
|||||||
message::{MessageType, RoomMessageEventContent, TextMessageEventContent},
|
message::{MessageType, RoomMessageEventContent, TextMessageEventContent},
|
||||||
power_levels::RoomPowerLevelsEventContent,
|
power_levels::RoomPowerLevelsEventContent,
|
||||||
},
|
},
|
||||||
AnyEphemeralRoomEvent, AnyMessageLikeEvent, AnyRoomEvent, AnyStateEvent,
|
AnyEphemeralRoomEvent, AnyOriginalMessageLikeEvent, AnyOriginalStateEvent,
|
||||||
AnyStateEventContent, AnySyncMessageLikeEvent, AnySyncRoomEvent, AnySyncStateEvent,
|
AnyOriginalSyncMessageLikeEvent, AnyOriginalSyncStateEvent, AnyRoomEvent,
|
||||||
EphemeralRoomEventType, GlobalAccountDataEventType, MessageLikeEvent, MessageLikeEventType,
|
AnyStateEventContent, AnySyncRoomEvent, EphemeralRoomEventType, GlobalAccountDataEventType,
|
||||||
MessageLikeUnsigned, RoomAccountDataEventType, StateEvent, StateEventType,
|
MessageLikeEventType, MessageLikeUnsigned, OriginalMessageLikeEvent, OriginalStateEvent,
|
||||||
SyncMessageLikeEvent, SyncStateEvent, ToDeviceEventType,
|
OriginalSyncMessageLikeEvent, OriginalSyncStateEvent, RoomAccountDataEventType,
|
||||||
|
StateEventType, ToDeviceEventType,
|
||||||
},
|
},
|
||||||
MilliSecondsSinceUnixEpoch,
|
MilliSecondsSinceUnixEpoch,
|
||||||
};
|
};
|
||||||
@ -123,8 +124,8 @@ fn power_event_sync_deserialization() {
|
|||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnySyncRoomEvent>(json_data),
|
from_json_value::<AnySyncRoomEvent>(json_data),
|
||||||
Ok(AnySyncRoomEvent::State(
|
Ok(AnySyncRoomEvent::OriginalState(
|
||||||
AnySyncStateEvent::RoomPowerLevels(SyncStateEvent {
|
AnyOriginalSyncStateEvent::RoomPowerLevels(OriginalSyncStateEvent {
|
||||||
content: RoomPowerLevelsEventContent {
|
content: RoomPowerLevelsEventContent {
|
||||||
ban, ..
|
ban, ..
|
||||||
},
|
},
|
||||||
@ -141,8 +142,8 @@ fn message_event_sync_deserialization() {
|
|||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnySyncRoomEvent>(json_data),
|
from_json_value::<AnySyncRoomEvent>(json_data),
|
||||||
Ok(AnySyncRoomEvent::MessageLike(
|
Ok(AnySyncRoomEvent::OriginalMessageLike(
|
||||||
AnySyncMessageLikeEvent::RoomMessage(SyncMessageLikeEvent {
|
AnyOriginalSyncMessageLikeEvent::RoomMessage(OriginalSyncMessageLikeEvent {
|
||||||
content: RoomMessageEventContent {
|
content: RoomMessageEventContent {
|
||||||
msgtype: MessageType::Text(TextMessageEventContent {
|
msgtype: MessageType::Text(TextMessageEventContent {
|
||||||
body,
|
body,
|
||||||
@ -164,8 +165,8 @@ fn aliases_event_sync_deserialization() {
|
|||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnySyncRoomEvent>(json_data),
|
from_json_value::<AnySyncRoomEvent>(json_data),
|
||||||
Ok(AnySyncRoomEvent::State(
|
Ok(AnySyncRoomEvent::OriginalState(
|
||||||
AnySyncStateEvent::RoomAliases(SyncStateEvent {
|
AnyOriginalSyncStateEvent::RoomAliases(OriginalSyncStateEvent {
|
||||||
content: RoomAliasesEventContent {
|
content: RoomAliasesEventContent {
|
||||||
aliases,
|
aliases,
|
||||||
..
|
..
|
||||||
@ -183,8 +184,8 @@ fn message_room_event_deserialization() {
|
|||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnyRoomEvent>(json_data),
|
from_json_value::<AnyRoomEvent>(json_data),
|
||||||
Ok(AnyRoomEvent::MessageLike(
|
Ok(AnyRoomEvent::OriginalMessageLike(
|
||||||
AnyMessageLikeEvent::RoomMessage(MessageLikeEvent {
|
AnyOriginalMessageLikeEvent::RoomMessage(OriginalMessageLikeEvent {
|
||||||
content: RoomMessageEventContent {
|
content: RoomMessageEventContent {
|
||||||
msgtype: MessageType::Text(TextMessageEventContent {
|
msgtype: MessageType::Text(TextMessageEventContent {
|
||||||
body,
|
body,
|
||||||
@ -202,7 +203,7 @@ fn message_room_event_deserialization() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn message_event_serialization() {
|
fn message_event_serialization() {
|
||||||
let event = MessageLikeEvent {
|
let event = OriginalMessageLikeEvent {
|
||||||
content: RoomMessageEventContent::text_plain("test"),
|
content: RoomMessageEventContent::text_plain("test"),
|
||||||
event_id: event_id!("$1234:example.com").to_owned(),
|
event_id: event_id!("$1234:example.com").to_owned(),
|
||||||
origin_server_ts: MilliSecondsSinceUnixEpoch(uint!(0)),
|
origin_server_ts: MilliSecondsSinceUnixEpoch(uint!(0)),
|
||||||
@ -230,8 +231,8 @@ fn alias_room_event_deserialization() {
|
|||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnyRoomEvent>(json_data),
|
from_json_value::<AnyRoomEvent>(json_data),
|
||||||
Ok(AnyRoomEvent::State(
|
Ok(AnyRoomEvent::OriginalState(
|
||||||
AnyStateEvent::RoomAliases(StateEvent {
|
AnyOriginalStateEvent::RoomAliases(OriginalStateEvent {
|
||||||
content: RoomAliasesEventContent {
|
content: RoomAliasesEventContent {
|
||||||
aliases,
|
aliases,
|
||||||
..
|
..
|
||||||
@ -249,8 +250,8 @@ fn message_event_deserialization() {
|
|||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnyRoomEvent>(json_data),
|
from_json_value::<AnyRoomEvent>(json_data),
|
||||||
Ok(AnyRoomEvent::MessageLike(
|
Ok(AnyRoomEvent::OriginalMessageLike(
|
||||||
AnyMessageLikeEvent::RoomMessage(MessageLikeEvent {
|
AnyOriginalMessageLikeEvent::RoomMessage(OriginalMessageLikeEvent {
|
||||||
content: RoomMessageEventContent {
|
content: RoomMessageEventContent {
|
||||||
msgtype: MessageType::Text(TextMessageEventContent {
|
msgtype: MessageType::Text(TextMessageEventContent {
|
||||||
body,
|
body,
|
||||||
@ -272,8 +273,8 @@ fn alias_event_deserialization() {
|
|||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnyRoomEvent>(json_data),
|
from_json_value::<AnyRoomEvent>(json_data),
|
||||||
Ok(AnyRoomEvent::State(
|
Ok(AnyRoomEvent::OriginalState(
|
||||||
AnyStateEvent::RoomAliases(StateEvent {
|
AnyOriginalStateEvent::RoomAliases(OriginalStateEvent {
|
||||||
content: RoomAliasesEventContent {
|
content: RoomAliasesEventContent {
|
||||||
aliases,
|
aliases,
|
||||||
..
|
..
|
||||||
@ -291,14 +292,14 @@ fn alias_event_field_access() {
|
|||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnyRoomEvent>(json_data.clone()),
|
from_json_value::<AnyRoomEvent>(json_data.clone()),
|
||||||
Ok(AnyRoomEvent::State(state_event))
|
Ok(AnyRoomEvent::OriginalState(state_event))
|
||||||
if state_event.state_key() == ""
|
if state_event.state_key() == ""
|
||||||
&& state_event.room_id() == room_id!("!room:room.com")
|
&& state_event.room_id() == room_id!("!room:room.com")
|
||||||
&& state_event.event_id() == event_id!("$152037280074GZeOm:localhost")
|
&& state_event.event_id() == event_id!("$152037280074GZeOm:localhost")
|
||||||
&& state_event.sender() == user_id!("@example:localhost")
|
&& state_event.sender() == user_id!("@example:localhost")
|
||||||
);
|
);
|
||||||
|
|
||||||
let deser = from_json_value::<AnyStateEvent>(json_data).unwrap();
|
let deser = from_json_value::<AnyOriginalStateEvent>(json_data).unwrap();
|
||||||
if let AnyStateEventContent::RoomAliases(RoomAliasesEventContent { aliases, .. }) =
|
if let AnyStateEventContent::RoomAliases(RoomAliasesEventContent { aliases, .. }) =
|
||||||
deser.content()
|
deser.content()
|
||||||
{
|
{
|
||||||
|
@ -5,7 +5,7 @@ use serde_json::{from_value as from_json_value, json};
|
|||||||
|
|
||||||
use ruma_common::events::{
|
use ruma_common::events::{
|
||||||
call::{answer::CallAnswerEventContent, SessionDescription, SessionDescriptionType},
|
call::{answer::CallAnswerEventContent, SessionDescription, SessionDescriptionType},
|
||||||
AnyMessageLikeEvent, MessageLikeEvent,
|
AnyOriginalMessageLikeEvent, OriginalMessageLikeEvent,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -35,9 +35,9 @@ fn deserialize_message_event() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnyMessageLikeEvent>(json_data)
|
from_json_value::<AnyOriginalMessageLikeEvent>(json_data)
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
AnyMessageLikeEvent::CallAnswer(MessageLikeEvent {
|
AnyOriginalMessageLikeEvent::CallAnswer(OriginalMessageLikeEvent {
|
||||||
content: CallAnswerEventContent {
|
content: CallAnswerEventContent {
|
||||||
answer: SessionDescription {
|
answer: SessionDescription {
|
||||||
session_type: SessionDescriptionType::Answer,
|
session_type: SessionDescriptionType::Answer,
|
||||||
|
@ -14,7 +14,7 @@ use ruma_common::{
|
|||||||
},
|
},
|
||||||
EncryptedFileInit, JsonWebKeyInit, MediaSource,
|
EncryptedFileInit, JsonWebKeyInit, MediaSource,
|
||||||
},
|
},
|
||||||
AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned,
|
AnyOriginalMessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
||||||
},
|
},
|
||||||
mxc_uri, room_id,
|
mxc_uri, room_id,
|
||||||
serde::Base64,
|
serde::Base64,
|
||||||
@ -92,7 +92,7 @@ fn encrypted_content_serialization() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn file_event_serialization() {
|
fn file_event_serialization() {
|
||||||
let event = MessageLikeEvent {
|
let event = OriginalMessageLikeEvent {
|
||||||
content: assign!(
|
content: assign!(
|
||||||
FileEventContent::plain_message(
|
FileEventContent::plain_message(
|
||||||
MessageContent::html(
|
MessageContent::html(
|
||||||
@ -225,8 +225,8 @@ fn message_event_deserialization() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnyMessageLikeEvent>(json_data).unwrap(),
|
from_json_value::<AnyOriginalMessageLikeEvent>(json_data).unwrap(),
|
||||||
AnyMessageLikeEvent::File(MessageLikeEvent {
|
AnyOriginalMessageLikeEvent::File(OriginalMessageLikeEvent {
|
||||||
content: FileEventContent {
|
content: FileEventContent {
|
||||||
message,
|
message,
|
||||||
file: FileContent {
|
file: FileContent {
|
||||||
|
@ -18,7 +18,7 @@ use ruma_common::{
|
|||||||
},
|
},
|
||||||
JsonWebKeyInit, MediaSource,
|
JsonWebKeyInit, MediaSource,
|
||||||
},
|
},
|
||||||
AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned,
|
AnyOriginalMessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
||||||
},
|
},
|
||||||
mxc_uri, room_id,
|
mxc_uri, room_id,
|
||||||
serde::Base64,
|
serde::Base64,
|
||||||
@ -99,7 +99,7 @@ fn encrypted_content_serialization() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn image_event_serialization() {
|
fn image_event_serialization() {
|
||||||
let event = MessageLikeEvent {
|
let event = OriginalMessageLikeEvent {
|
||||||
content: assign!(
|
content: assign!(
|
||||||
ImageEventContent::with_message(
|
ImageEventContent::with_message(
|
||||||
MessageContent::html(
|
MessageContent::html(
|
||||||
@ -285,8 +285,8 @@ fn message_event_deserialization() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnyMessageLikeEvent>(json_data).unwrap(),
|
from_json_value::<AnyOriginalMessageLikeEvent>(json_data).unwrap(),
|
||||||
AnyMessageLikeEvent::Image(MessageLikeEvent {
|
AnyOriginalMessageLikeEvent::Image(OriginalMessageLikeEvent {
|
||||||
content: ImageEventContent {
|
content: ImageEventContent {
|
||||||
message,
|
message,
|
||||||
file: FileContent {
|
file: FileContent {
|
||||||
|
@ -14,7 +14,7 @@ use ruma_common::{
|
|||||||
room::message::{
|
room::message::{
|
||||||
InReplyTo, LocationMessageEventContent, MessageType, Relation, RoomMessageEventContent,
|
InReplyTo, LocationMessageEventContent, MessageType, Relation, RoomMessageEventContent,
|
||||||
},
|
},
|
||||||
AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned,
|
AnyOriginalMessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
||||||
},
|
},
|
||||||
room_id, user_id, MilliSecondsSinceUnixEpoch,
|
room_id, user_id, MilliSecondsSinceUnixEpoch,
|
||||||
};
|
};
|
||||||
@ -40,7 +40,7 @@ fn plain_content_serialization() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn event_serialization() {
|
fn event_serialization() {
|
||||||
let event = MessageLikeEvent {
|
let event = OriginalMessageLikeEvent {
|
||||||
content: assign!(
|
content: assign!(
|
||||||
LocationEventContent::with_message(
|
LocationEventContent::with_message(
|
||||||
MessageContent::html(
|
MessageContent::html(
|
||||||
@ -195,8 +195,8 @@ fn message_event_deserialization() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnyMessageLikeEvent>(json_data).unwrap(),
|
from_json_value::<AnyOriginalMessageLikeEvent>(json_data).unwrap(),
|
||||||
AnyMessageLikeEvent::Location(MessageLikeEvent {
|
AnyOriginalMessageLikeEvent::Location(OriginalMessageLikeEvent {
|
||||||
content: LocationEventContent {
|
content: LocationEventContent {
|
||||||
message,
|
message,
|
||||||
location: LocationContent {
|
location: LocationContent {
|
||||||
|
@ -15,7 +15,7 @@ use ruma_common::{
|
|||||||
EmoteMessageEventContent, InReplyTo, MessageType, NoticeMessageEventContent, Relation,
|
EmoteMessageEventContent, InReplyTo, MessageType, NoticeMessageEventContent, Relation,
|
||||||
RoomMessageEventContent, TextMessageEventContent,
|
RoomMessageEventContent, TextMessageEventContent,
|
||||||
},
|
},
|
||||||
AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned,
|
AnyOriginalMessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
||||||
},
|
},
|
||||||
room_id, user_id, MilliSecondsSinceUnixEpoch,
|
room_id, user_id, MilliSecondsSinceUnixEpoch,
|
||||||
};
|
};
|
||||||
@ -126,7 +126,7 @@ fn relates_to_content_serialization() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn message_event_serialization() {
|
fn message_event_serialization() {
|
||||||
let event = MessageLikeEvent {
|
let event = OriginalMessageLikeEvent {
|
||||||
content: MessageEventContent::plain("Hello, World!"),
|
content: MessageEventContent::plain("Hello, World!"),
|
||||||
event_id: event_id!("$event:notareal.hs").to_owned(),
|
event_id: event_id!("$event:notareal.hs").to_owned(),
|
||||||
sender: user_id!("@user:notareal.hs").to_owned(),
|
sender: user_id!("@user:notareal.hs").to_owned(),
|
||||||
@ -255,8 +255,8 @@ fn message_event_deserialization() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnyMessageLikeEvent>(json_data).unwrap(),
|
from_json_value::<AnyOriginalMessageLikeEvent>(json_data).unwrap(),
|
||||||
AnyMessageLikeEvent::Message(MessageLikeEvent {
|
AnyOriginalMessageLikeEvent::Message(OriginalMessageLikeEvent {
|
||||||
content: MessageEventContent {
|
content: MessageEventContent {
|
||||||
message,
|
message,
|
||||||
..
|
..
|
||||||
@ -391,7 +391,7 @@ fn room_message_html_text_unstable_deserialization() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn notice_event_serialization() {
|
fn notice_event_serialization() {
|
||||||
let event = MessageLikeEvent {
|
let event = OriginalMessageLikeEvent {
|
||||||
content: NoticeEventContent::plain("Hello, I'm a robot!"),
|
content: NoticeEventContent::plain("Hello, I'm a robot!"),
|
||||||
event_id: event_id!("$event:notareal.hs").to_owned(),
|
event_id: event_id!("$event:notareal.hs").to_owned(),
|
||||||
sender: user_id!("@user:notareal.hs").to_owned(),
|
sender: user_id!("@user:notareal.hs").to_owned(),
|
||||||
@ -447,8 +447,8 @@ fn notice_event_stable_deserialization() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnyMessageLikeEvent>(json_data).unwrap(),
|
from_json_value::<AnyOriginalMessageLikeEvent>(json_data).unwrap(),
|
||||||
AnyMessageLikeEvent::Notice(MessageLikeEvent {
|
AnyOriginalMessageLikeEvent::Notice(OriginalMessageLikeEvent {
|
||||||
content: NoticeEventContent {
|
content: NoticeEventContent {
|
||||||
message,
|
message,
|
||||||
..
|
..
|
||||||
@ -485,8 +485,8 @@ fn notice_event_unstable_deserialization() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnyMessageLikeEvent>(json_data).unwrap(),
|
from_json_value::<AnyOriginalMessageLikeEvent>(json_data).unwrap(),
|
||||||
AnyMessageLikeEvent::Notice(MessageLikeEvent {
|
AnyOriginalMessageLikeEvent::Notice(OriginalMessageLikeEvent {
|
||||||
content: NoticeEventContent {
|
content: NoticeEventContent {
|
||||||
message,
|
message,
|
||||||
..
|
..
|
||||||
@ -558,7 +558,7 @@ fn room_message_notice_unstable_deserialization() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn emote_event_serialization() {
|
fn emote_event_serialization() {
|
||||||
let event = MessageLikeEvent {
|
let event = OriginalMessageLikeEvent {
|
||||||
content: EmoteEventContent::html(
|
content: EmoteEventContent::html(
|
||||||
"is testing some code…",
|
"is testing some code…",
|
||||||
"is testing some <code>code</code>…",
|
"is testing some <code>code</code>…",
|
||||||
@ -618,8 +618,8 @@ fn emote_event_stable_deserialization() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnyMessageLikeEvent>(json_data).unwrap(),
|
from_json_value::<AnyOriginalMessageLikeEvent>(json_data).unwrap(),
|
||||||
AnyMessageLikeEvent::Emote(MessageLikeEvent {
|
AnyOriginalMessageLikeEvent::Emote(OriginalMessageLikeEvent {
|
||||||
content: EmoteEventContent {
|
content: EmoteEventContent {
|
||||||
message,
|
message,
|
||||||
..
|
..
|
||||||
@ -653,8 +653,8 @@ fn emote_event_unstable_deserialization() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnyMessageLikeEvent>(json_data).unwrap(),
|
from_json_value::<AnyOriginalMessageLikeEvent>(json_data).unwrap(),
|
||||||
AnyMessageLikeEvent::Emote(MessageLikeEvent {
|
AnyOriginalMessageLikeEvent::Emote(OriginalMessageLikeEvent {
|
||||||
content: EmoteEventContent {
|
content: EmoteEventContent {
|
||||||
message,
|
message,
|
||||||
..
|
..
|
||||||
|
@ -7,8 +7,8 @@ use ruma_common::{
|
|||||||
call::{answer::CallAnswerEventContent, SessionDescription, SessionDescriptionType},
|
call::{answer::CallAnswerEventContent, SessionDescription, SessionDescriptionType},
|
||||||
room::{ImageInfo, MediaSource, ThumbnailInfo},
|
room::{ImageInfo, MediaSource, ThumbnailInfo},
|
||||||
sticker::StickerEventContent,
|
sticker::StickerEventContent,
|
||||||
AnyMessageLikeEvent, AnyMessageLikeEventContent, AnySyncMessageLikeEvent, MessageLikeEvent,
|
AnyMessageLikeEventContent, AnyOriginalMessageLikeEvent, AnyOriginalSyncMessageLikeEvent,
|
||||||
MessageLikeEventType, MessageLikeUnsigned,
|
MessageLikeEventType, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
||||||
},
|
},
|
||||||
mxc_uri, room_id,
|
mxc_uri, room_id,
|
||||||
serde::Raw,
|
serde::Raw,
|
||||||
@ -18,7 +18,7 @@ use serde_json::{from_value as from_json_value, json, to_value as to_json_value}
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn message_serialize_sticker() {
|
fn message_serialize_sticker() {
|
||||||
let aliases_event = MessageLikeEvent {
|
let aliases_event = OriginalMessageLikeEvent {
|
||||||
content: StickerEventContent::new(
|
content: StickerEventContent::new(
|
||||||
"Hello".into(),
|
"Hello".into(),
|
||||||
assign!(ImageInfo::new(), {
|
assign!(ImageInfo::new(), {
|
||||||
@ -167,8 +167,8 @@ fn deserialize_message_call_answer() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnyMessageLikeEvent>(json_data).unwrap(),
|
from_json_value::<AnyOriginalMessageLikeEvent>(json_data).unwrap(),
|
||||||
AnyMessageLikeEvent::CallAnswer(MessageLikeEvent {
|
AnyOriginalMessageLikeEvent::CallAnswer(OriginalMessageLikeEvent {
|
||||||
content: CallAnswerEventContent {
|
content: CallAnswerEventContent {
|
||||||
answer: SessionDescription {
|
answer: SessionDescription {
|
||||||
session_type: SessionDescriptionType::Answer,
|
session_type: SessionDescriptionType::Answer,
|
||||||
@ -221,8 +221,8 @@ fn deserialize_message_sticker() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnyMessageLikeEvent>(json_data).unwrap(),
|
from_json_value::<AnyOriginalMessageLikeEvent>(json_data).unwrap(),
|
||||||
AnyMessageLikeEvent::Sticker(MessageLikeEvent {
|
AnyOriginalMessageLikeEvent::Sticker(OriginalMessageLikeEvent {
|
||||||
content: StickerEventContent {
|
content: StickerEventContent {
|
||||||
body,
|
body,
|
||||||
info: ImageInfo {
|
info: ImageInfo {
|
||||||
@ -290,11 +290,11 @@ fn deserialize_message_then_convert_to_full() {
|
|||||||
"type": "m.call.answer"
|
"type": "m.call.answer"
|
||||||
});
|
});
|
||||||
|
|
||||||
let sync_ev: AnySyncMessageLikeEvent = from_json_value(json_data).unwrap();
|
let sync_ev: AnyOriginalSyncMessageLikeEvent = from_json_value(json_data).unwrap();
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
sync_ev.into_full_event(rid.to_owned()),
|
sync_ev.into_full_event(rid.to_owned()),
|
||||||
AnyMessageLikeEvent::CallAnswer(MessageLikeEvent {
|
AnyOriginalMessageLikeEvent::CallAnswer(OriginalMessageLikeEvent {
|
||||||
content: CallAnswerEventContent {
|
content: CallAnswerEventContent {
|
||||||
answer: SessionDescription {
|
answer: SessionDescription {
|
||||||
session_type: SessionDescriptionType::Answer,
|
session_type: SessionDescriptionType::Answer,
|
||||||
|
@ -7,9 +7,9 @@ use ruma_common::{
|
|||||||
aliases::RedactedRoomAliasesEventContent,
|
aliases::RedactedRoomAliasesEventContent,
|
||||||
create::{RedactedRoomCreateEventContent, RoomCreateEventContent},
|
create::{RedactedRoomCreateEventContent, RoomCreateEventContent},
|
||||||
message::{RedactedRoomMessageEventContent, RoomMessageEventContent},
|
message::{RedactedRoomMessageEventContent, RoomMessageEventContent},
|
||||||
redaction::{RoomRedactionEventContent, SyncRoomRedactionEvent},
|
redaction::{OriginalSyncRoomRedactionEvent, RoomRedactionEventContent},
|
||||||
},
|
},
|
||||||
AnyMessageLikeEvent, AnyRedactedMessageLikeEvent, AnyRedactedSyncMessageLikeEvent,
|
AnyOriginalMessageLikeEvent, AnyRedactedMessageLikeEvent, AnyRedactedSyncMessageLikeEvent,
|
||||||
AnyRedactedSyncStateEvent, AnyRoomEvent, AnySyncRoomEvent, EventContent,
|
AnyRedactedSyncStateEvent, AnyRoomEvent, AnySyncRoomEvent, EventContent,
|
||||||
MessageLikeUnsigned, Redact, RedactContent, RedactedMessageLikeEvent,
|
MessageLikeUnsigned, Redact, RedactContent, RedactedMessageLikeEvent,
|
||||||
RedactedSyncMessageLikeEvent, RedactedSyncStateEvent, RedactedUnsigned,
|
RedactedSyncMessageLikeEvent, RedactedSyncStateEvent, RedactedUnsigned,
|
||||||
@ -23,7 +23,7 @@ use serde_json::{
|
|||||||
|
|
||||||
fn unsigned() -> RedactedUnsigned {
|
fn unsigned() -> RedactedUnsigned {
|
||||||
let mut unsigned = RedactedUnsigned::default();
|
let mut unsigned = RedactedUnsigned::default();
|
||||||
unsigned.redacted_because = Some(Box::new(SyncRoomRedactionEvent {
|
unsigned.redacted_because = Some(Box::new(OriginalSyncRoomRedactionEvent {
|
||||||
content: RoomRedactionEventContent::with_reason("redacted because".into()),
|
content: RoomRedactionEventContent::with_reason("redacted because".into()),
|
||||||
redacts: event_id!("$h29iv0s8:example.com").to_owned(),
|
redacts: event_id!("$h29iv0s8:example.com").to_owned(),
|
||||||
event_id: event_id!("$h29iv0s8:example.com").to_owned(),
|
event_id: event_id!("$h29iv0s8:example.com").to_owned(),
|
||||||
@ -160,7 +160,7 @@ fn redacted_deserialize_any_room_sync() {
|
|||||||
// The presence of `redacted_because` triggers the event enum (AnySyncRoomEvent in this case)
|
// The presence of `redacted_because` triggers the event enum (AnySyncRoomEvent in this case)
|
||||||
// to return early with `RedactedContent` instead of failing to deserialize according
|
// to return early with `RedactedContent` instead of failing to deserialize according
|
||||||
// to the event type string.
|
// to the event type string.
|
||||||
unsigned.redacted_because = Some(Box::new(SyncRoomRedactionEvent {
|
unsigned.redacted_because = Some(Box::new(OriginalSyncRoomRedactionEvent {
|
||||||
content: RoomRedactionEventContent::with_reason("redacted because".into()),
|
content: RoomRedactionEventContent::with_reason("redacted because".into()),
|
||||||
redacts: event_id!("$h29iv0s8:example.com").to_owned(),
|
redacts: event_id!("$h29iv0s8:example.com").to_owned(),
|
||||||
event_id: event_id!("$h29iv0s8:example.com").to_owned(),
|
event_id: event_id!("$h29iv0s8:example.com").to_owned(),
|
||||||
@ -260,7 +260,7 @@ fn redact_method_properly_redacts() {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
let redaction = SyncRoomRedactionEvent {
|
let redaction = OriginalSyncRoomRedactionEvent {
|
||||||
content: RoomRedactionEventContent::with_reason("redacted because".into()),
|
content: RoomRedactionEventContent::with_reason("redacted because".into()),
|
||||||
redacts: event_id!("$143273582443PhrSn:example.com").to_owned(),
|
redacts: event_id!("$143273582443PhrSn:example.com").to_owned(),
|
||||||
event_id: event_id!("$h29iv0s8:example.com").to_owned(),
|
event_id: event_id!("$h29iv0s8:example.com").to_owned(),
|
||||||
@ -269,7 +269,7 @@ fn redact_method_properly_redacts() {
|
|||||||
unsigned: MessageLikeUnsigned::default(),
|
unsigned: MessageLikeUnsigned::default(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let event: AnyMessageLikeEvent = from_json_value(ev).unwrap();
|
let event: AnyOriginalMessageLikeEvent = from_json_value(ev).unwrap();
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
event.redact(redaction, &RoomVersionId::V6),
|
event.redact(redaction, &RoomVersionId::V6),
|
||||||
|
@ -3,8 +3,8 @@ use matches::assert_matches;
|
|||||||
use ruma_common::{
|
use ruma_common::{
|
||||||
event_id,
|
event_id,
|
||||||
events::{
|
events::{
|
||||||
room::redaction::{RoomRedactionEvent, RoomRedactionEventContent},
|
room::redaction::{OriginalRoomRedactionEvent, RoomRedactionEventContent},
|
||||||
AnyMessageLikeEvent, MessageLikeUnsigned,
|
AnyOriginalMessageLikeEvent, MessageLikeUnsigned,
|
||||||
},
|
},
|
||||||
room_id, user_id, MilliSecondsSinceUnixEpoch,
|
room_id, user_id, MilliSecondsSinceUnixEpoch,
|
||||||
};
|
};
|
||||||
@ -28,7 +28,7 @@ fn redaction() -> JsonValue {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn serialize_redaction() {
|
fn serialize_redaction() {
|
||||||
let aliases_event = RoomRedactionEvent {
|
let aliases_event = OriginalRoomRedactionEvent {
|
||||||
content: RoomRedactionEventContent::with_reason("being a turd".into()),
|
content: RoomRedactionEventContent::with_reason("being a turd".into()),
|
||||||
redacts: event_id!("$nomore:example.com").to_owned(),
|
redacts: event_id!("$nomore:example.com").to_owned(),
|
||||||
event_id: event_id!("$h29iv0s8:example.com").to_owned(),
|
event_id: event_id!("$h29iv0s8:example.com").to_owned(),
|
||||||
@ -49,8 +49,8 @@ fn deserialize_redaction() {
|
|||||||
let json_data = redaction();
|
let json_data = redaction();
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnyMessageLikeEvent>(json_data).unwrap(),
|
from_json_value::<AnyOriginalMessageLikeEvent>(json_data).unwrap(),
|
||||||
AnyMessageLikeEvent::RoomRedaction(RoomRedactionEvent {
|
AnyOriginalMessageLikeEvent::RoomRedaction(OriginalRoomRedactionEvent {
|
||||||
content: RoomRedactionEventContent { reason: Some(reas), .. },
|
content: RoomRedactionEventContent { reason: Some(reas), .. },
|
||||||
redacts,
|
redacts,
|
||||||
event_id,
|
event_id,
|
||||||
|
@ -15,7 +15,7 @@ use ruma_common::{
|
|||||||
room::{
|
room::{
|
||||||
message::{
|
message::{
|
||||||
AudioMessageEventContent, KeyVerificationRequestEventContent, MessageType,
|
AudioMessageEventContent, KeyVerificationRequestEventContent, MessageType,
|
||||||
RoomMessageEvent, RoomMessageEventContent, TextMessageEventContent,
|
OriginalRoomMessageEvent, RoomMessageEventContent, TextMessageEventContent,
|
||||||
},
|
},
|
||||||
MediaSource,
|
MediaSource,
|
||||||
},
|
},
|
||||||
@ -39,7 +39,7 @@ macro_rules! json_object {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn serialization() {
|
fn serialization() {
|
||||||
let ev = RoomMessageEvent {
|
let ev = OriginalRoomMessageEvent {
|
||||||
content: RoomMessageEventContent::new(MessageType::Audio(AudioMessageEventContent::plain(
|
content: RoomMessageEventContent::new(MessageType::Audio(AudioMessageEventContent::plain(
|
||||||
"test".into(),
|
"test".into(),
|
||||||
mxc_uri!("mxc://example.org/ffed755USFFxlgbQYZGtryd").to_owned(),
|
mxc_uri!("mxc://example.org/ffed755USFFxlgbQYZGtryd").to_owned(),
|
||||||
|
@ -9,8 +9,8 @@ use ruma_common::{
|
|||||||
avatar::{ImageInfo, RoomAvatarEventContent},
|
avatar::{ImageInfo, RoomAvatarEventContent},
|
||||||
ThumbnailInfo,
|
ThumbnailInfo,
|
||||||
},
|
},
|
||||||
AnyRoomEvent, AnyStateEvent, AnyStateEventContent, AnySyncStateEvent, StateEvent,
|
AnyOriginalStateEvent, AnyOriginalSyncStateEvent, AnyRoomEvent, AnyStateEventContent,
|
||||||
StateEventType, StateUnsigned, SyncStateEvent,
|
OriginalStateEvent, OriginalSyncStateEvent, StateEventType, StateUnsigned,
|
||||||
},
|
},
|
||||||
mxc_uri, room_alias_id, room_id,
|
mxc_uri, room_alias_id, room_id,
|
||||||
serde::Raw,
|
serde::Raw,
|
||||||
@ -41,7 +41,7 @@ fn aliases_event_with_prev_content() -> JsonValue {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn serialize_aliases_with_prev_content() {
|
fn serialize_aliases_with_prev_content() {
|
||||||
let aliases_event = StateEvent {
|
let aliases_event = OriginalStateEvent {
|
||||||
content: RoomAliasesEventContent::new(vec![
|
content: RoomAliasesEventContent::new(vec![
|
||||||
room_alias_id!("#somewhere:localhost").to_owned()
|
room_alias_id!("#somewhere:localhost").to_owned()
|
||||||
]),
|
]),
|
||||||
@ -66,7 +66,7 @@ fn serialize_aliases_with_prev_content() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn serialize_aliases_without_prev_content() {
|
fn serialize_aliases_without_prev_content() {
|
||||||
let aliases_event = StateEvent {
|
let aliases_event = OriginalStateEvent {
|
||||||
content: RoomAliasesEventContent::new(vec![
|
content: RoomAliasesEventContent::new(vec![
|
||||||
room_alias_id!("#somewhere:localhost").to_owned()
|
room_alias_id!("#somewhere:localhost").to_owned()
|
||||||
]),
|
]),
|
||||||
@ -115,8 +115,8 @@ fn deserialize_aliases_with_prev_content() {
|
|||||||
let json_data = aliases_event_with_prev_content();
|
let json_data = aliases_event_with_prev_content();
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnyStateEvent>(json_data).unwrap(),
|
from_json_value::<AnyOriginalStateEvent>(json_data).unwrap(),
|
||||||
AnyStateEvent::RoomAliases(StateEvent {
|
AnyOriginalStateEvent::RoomAliases(OriginalStateEvent {
|
||||||
content,
|
content,
|
||||||
event_id,
|
event_id,
|
||||||
origin_server_ts,
|
origin_server_ts,
|
||||||
@ -143,9 +143,9 @@ fn deserialize_aliases_sync_with_room_id() {
|
|||||||
let json_data = aliases_event_with_prev_content();
|
let json_data = aliases_event_with_prev_content();
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnySyncStateEvent>(json_data)
|
from_json_value::<AnyOriginalSyncStateEvent>(json_data)
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
AnySyncStateEvent::RoomAliases(SyncStateEvent {
|
AnyOriginalSyncStateEvent::RoomAliases(OriginalSyncStateEvent {
|
||||||
content,
|
content,
|
||||||
event_id,
|
event_id,
|
||||||
origin_server_ts,
|
origin_server_ts,
|
||||||
@ -193,8 +193,8 @@ fn deserialize_avatar_without_prev_content() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnyStateEvent>(json_data).unwrap(),
|
from_json_value::<AnyOriginalStateEvent>(json_data).unwrap(),
|
||||||
AnyStateEvent::RoomAvatar(StateEvent {
|
AnyOriginalStateEvent::RoomAvatar(OriginalStateEvent {
|
||||||
content: RoomAvatarEventContent {
|
content: RoomAvatarEventContent {
|
||||||
info: Some(info),
|
info: Some(info),
|
||||||
url: Some(url),
|
url: Some(url),
|
||||||
@ -268,8 +268,8 @@ fn deserialize_member_event_with_top_level_membership_field() {
|
|||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnyRoomEvent>(json_data)
|
from_json_value::<AnyRoomEvent>(json_data)
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
AnyRoomEvent::State(
|
AnyRoomEvent::OriginalState(
|
||||||
AnyStateEvent::RoomMember(StateEvent {
|
AnyOriginalStateEvent::RoomMember(OriginalStateEvent {
|
||||||
content,
|
content,
|
||||||
event_id,
|
event_id,
|
||||||
origin_server_ts,
|
origin_server_ts,
|
||||||
@ -287,11 +287,11 @@ fn deserialize_member_event_with_top_level_membership_field() {
|
|||||||
fn deserialize_full_event_convert_to_sync() {
|
fn deserialize_full_event_convert_to_sync() {
|
||||||
let json_data = aliases_event_with_prev_content();
|
let json_data = aliases_event_with_prev_content();
|
||||||
|
|
||||||
let full_ev: AnyStateEvent = from_json_value(json_data).unwrap();
|
let full_ev: AnyOriginalStateEvent = from_json_value(json_data).unwrap();
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
AnySyncStateEvent::from(full_ev),
|
AnyOriginalSyncStateEvent::from(full_ev),
|
||||||
AnySyncStateEvent::RoomAliases(SyncStateEvent {
|
AnyOriginalSyncStateEvent::RoomAliases(OriginalSyncStateEvent {
|
||||||
content,
|
content,
|
||||||
event_id,
|
event_id,
|
||||||
origin_server_ts,
|
origin_server_ts,
|
||||||
|
@ -11,7 +11,7 @@ use ruma_macros::Event;
|
|||||||
|
|
||||||
/// State event.
|
/// State event.
|
||||||
#[derive(Clone, Debug, Event)]
|
#[derive(Clone, Debug, Event)]
|
||||||
pub struct StateEvent<C: StateEventContent> {
|
pub struct OriginalStateEvent<C: StateEventContent> {
|
||||||
pub content: C,
|
pub content: C,
|
||||||
pub event_id: Box<EventId>,
|
pub event_id: Box<EventId>,
|
||||||
pub sender: Box<UserId>,
|
pub sender: Box<UserId>,
|
||||||
|
@ -3,6 +3,6 @@ use ruma_macros::Event;
|
|||||||
|
|
||||||
/// State event.
|
/// State event.
|
||||||
#[derive(Clone, Debug, Event)]
|
#[derive(Clone, Debug, Event)]
|
||||||
pub struct StateEvent<C: StateEventContent>(C);
|
pub struct OriginalStateEvent<C: StateEventContent>(C);
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
error: the `Event` derive only supports structs with named fields
|
error: the `Event` derive only supports structs with named fields
|
||||||
--> tests/events/ui/05-named-fields.rs:6:12
|
--> tests/events/ui/05-named-fields.rs:6:12
|
||||||
|
|
|
|
||||||
6 | pub struct StateEvent<C: StateEventContent>(C);
|
6 | pub struct OriginalStateEvent<C: StateEventContent>(C);
|
||||||
| ^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -3,7 +3,7 @@ use ruma_macros::Event;
|
|||||||
|
|
||||||
/// State event.
|
/// State event.
|
||||||
#[derive(Clone, Debug, Event)]
|
#[derive(Clone, Debug, Event)]
|
||||||
pub struct StateEvent<C: StateEventContent> {
|
pub struct OriginalStateEvent<C: StateEventContent> {
|
||||||
pub not_content: C,
|
pub not_content: C,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ use ruma_common::{
|
|||||||
JsonWebKeyInit, MediaSource,
|
JsonWebKeyInit, MediaSource,
|
||||||
},
|
},
|
||||||
video::{VideoContent, VideoEventContent},
|
video::{VideoContent, VideoEventContent},
|
||||||
AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned,
|
AnyOriginalMessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
||||||
},
|
},
|
||||||
mxc_uri, room_id,
|
mxc_uri, room_id,
|
||||||
serde::Base64,
|
serde::Base64,
|
||||||
@ -99,7 +99,7 @@ fn encrypted_content_serialization() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn event_serialization() {
|
fn event_serialization() {
|
||||||
let event = MessageLikeEvent {
|
let event = OriginalMessageLikeEvent {
|
||||||
content: assign!(
|
content: assign!(
|
||||||
VideoEventContent::with_message(
|
VideoEventContent::with_message(
|
||||||
MessageContent::html(
|
MessageContent::html(
|
||||||
@ -295,8 +295,8 @@ fn message_event_deserialization() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnyMessageLikeEvent>(json_data).unwrap(),
|
from_json_value::<AnyOriginalMessageLikeEvent>(json_data).unwrap(),
|
||||||
AnyMessageLikeEvent::Video(MessageLikeEvent {
|
AnyOriginalMessageLikeEvent::Video(OriginalMessageLikeEvent {
|
||||||
content: VideoEventContent {
|
content: VideoEventContent {
|
||||||
message,
|
message,
|
||||||
file: FileContent {
|
file: FileContent {
|
||||||
|
@ -17,7 +17,7 @@ use ruma_common::{
|
|||||||
MediaSource,
|
MediaSource,
|
||||||
},
|
},
|
||||||
voice::{VoiceContent, VoiceEventContent},
|
voice::{VoiceContent, VoiceEventContent},
|
||||||
AnyMessageLikeEvent, MessageLikeEvent, MessageLikeUnsigned,
|
AnyOriginalMessageLikeEvent, MessageLikeUnsigned, OriginalMessageLikeEvent,
|
||||||
},
|
},
|
||||||
mxc_uri, room_id, user_id, MilliSecondsSinceUnixEpoch,
|
mxc_uri, room_id, user_id, MilliSecondsSinceUnixEpoch,
|
||||||
};
|
};
|
||||||
@ -25,7 +25,7 @@ use serde_json::{from_value as from_json_value, json, to_value as to_json_value}
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn event_serialization() {
|
fn event_serialization() {
|
||||||
let event = MessageLikeEvent {
|
let event = OriginalMessageLikeEvent {
|
||||||
content: assign!(
|
content: assign!(
|
||||||
VoiceEventContent::plain(
|
VoiceEventContent::plain(
|
||||||
"Voice message",
|
"Voice message",
|
||||||
@ -114,8 +114,8 @@ fn message_event_deserialization() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
from_json_value::<AnyMessageLikeEvent>(json_data).unwrap(),
|
from_json_value::<AnyOriginalMessageLikeEvent>(json_data).unwrap(),
|
||||||
AnyMessageLikeEvent::Voice(MessageLikeEvent {
|
AnyOriginalMessageLikeEvent::Voice(OriginalMessageLikeEvent {
|
||||||
content: VoiceEventContent {
|
content: VoiceEventContent {
|
||||||
message,
|
message,
|
||||||
file: FileContent {
|
file: FileContent {
|
||||||
|
@ -55,7 +55,7 @@ pub fn expand_event(input: DeriveInput) -> syn::Result<TokenStream> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if matches!(kind, EventKind::MessageLike | EventKind::State)
|
if matches!(kind, EventKind::MessageLike | EventKind::State)
|
||||||
&& matches!(var, EventKindVariation::Full | EventKindVariation::Sync)
|
&& matches!(var, EventKindVariation::Original | EventKindVariation::OriginalSync)
|
||||||
{
|
{
|
||||||
res.extend(expand_redact_event(&input, kind, var, &fields, &ruma_common));
|
res.extend(expand_redact_event(&input, kind, var, &fields, &ruma_common));
|
||||||
}
|
}
|
||||||
@ -422,7 +422,7 @@ fn expand_redact_event(
|
|||||||
|
|
||||||
fn redact(
|
fn redact(
|
||||||
self,
|
self,
|
||||||
redaction: #ruma_common::events::room::redaction::SyncRoomRedactionEvent,
|
redaction: #ruma_common::events::room::redaction::OriginalSyncRoomRedactionEvent,
|
||||||
version: &#ruma_common::RoomVersionId,
|
version: &#ruma_common::RoomVersionId,
|
||||||
) -> Self::Redacted {
|
) -> Self::Redacted {
|
||||||
let content = #ruma_common::events::RedactContent::redact(self.content, version);
|
let content = #ruma_common::events::RedactContent::redact(self.content, version);
|
||||||
|
@ -367,8 +367,10 @@ fn generate_event_type_aliases(
|
|||||||
})?;
|
})?;
|
||||||
|
|
||||||
let type_aliases = [
|
let type_aliases = [
|
||||||
EventKindVariation::Full,
|
EventKindVariation::None,
|
||||||
EventKindVariation::Sync,
|
EventKindVariation::Sync,
|
||||||
|
EventKindVariation::Original,
|
||||||
|
EventKindVariation::OriginalSync,
|
||||||
EventKindVariation::Stripped,
|
EventKindVariation::Stripped,
|
||||||
EventKindVariation::Initial,
|
EventKindVariation::Initial,
|
||||||
EventKindVariation::Redacted,
|
EventKindVariation::Redacted,
|
||||||
@ -380,8 +382,10 @@ fn generate_event_type_aliases(
|
|||||||
let ev_type = format_ident!("{}{}", var, ev_type_s);
|
let ev_type = format_ident!("{}{}", var, ev_type_s);
|
||||||
|
|
||||||
let doc_text = match var {
|
let doc_text = match var {
|
||||||
EventKindVariation::Full => "",
|
EventKindVariation::None | EventKindVariation::Original => "",
|
||||||
EventKindVariation::Sync => " from a `sync_events` response",
|
EventKindVariation::Sync | EventKindVariation::OriginalSync => {
|
||||||
|
" from a `sync_events` response"
|
||||||
|
}
|
||||||
EventKindVariation::Stripped => " from an invited room preview",
|
EventKindVariation::Stripped => " from an invited room preview",
|
||||||
EventKindVariation::Redacted => " that has been redacted",
|
EventKindVariation::Redacted => " that has been redacted",
|
||||||
EventKindVariation::RedactedSync => {
|
EventKindVariation::RedactedSync => {
|
||||||
|
@ -20,7 +20,12 @@ const EVENT_FIELDS: &[(&str, EventKindFn)] = &[
|
|||||||
("origin_server_ts", is_non_stripped_room_event),
|
("origin_server_ts", is_non_stripped_room_event),
|
||||||
("room_id", |kind, var| {
|
("room_id", |kind, var| {
|
||||||
matches!(kind, EventKind::MessageLike | EventKind::State | EventKind::Ephemeral)
|
matches!(kind, EventKind::MessageLike | EventKind::State | EventKind::Ephemeral)
|
||||||
&& matches!(var, EventKindVariation::Full | EventKindVariation::Redacted)
|
&& matches!(
|
||||||
|
var,
|
||||||
|
EventKindVariation::None
|
||||||
|
| EventKindVariation::Original
|
||||||
|
| EventKindVariation::Redacted
|
||||||
|
)
|
||||||
}),
|
}),
|
||||||
("event_id", is_non_stripped_room_event),
|
("event_id", is_non_stripped_room_event),
|
||||||
("sender", |kind, var| {
|
("sender", |kind, var| {
|
||||||
@ -48,25 +53,61 @@ pub fn expand_event_enums(input: &EventEnumDecl) -> syn::Result<TokenStream> {
|
|||||||
let variants = &variants;
|
let variants = &variants;
|
||||||
let ruma_common = &ruma_common;
|
let ruma_common = &ruma_common;
|
||||||
|
|
||||||
res.extend(
|
|
||||||
expand_event_enum(kind, V::Full, events, attrs, variants, ruma_common)
|
|
||||||
.unwrap_or_else(syn::Error::into_compile_error),
|
|
||||||
);
|
|
||||||
res.extend(expand_content_enum(kind, events, attrs, variants, ruma_common));
|
res.extend(expand_content_enum(kind, events, attrs, variants, ruma_common));
|
||||||
|
|
||||||
if matches!(kind, EventKind::Ephemeral | EventKind::MessageLike | EventKind::State) {
|
if matches!(kind, EventKind::MessageLike | EventKind::State) {
|
||||||
|
res.extend(
|
||||||
|
expand_event_enum(kind, V::Original, events, attrs, variants, ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
res.extend(
|
||||||
|
expand_event_enum(kind, V::OriginalSync, events, attrs, variants, ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
res.extend(
|
||||||
|
expand_event_enum(kind, V::Redacted, events, attrs, variants, ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
res.extend(
|
||||||
|
expand_event_enum(kind, V::RedactedSync, events, attrs, variants, ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
res.extend(
|
||||||
|
expand_redact(kind, V::Original, variants, ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
res.extend(
|
||||||
|
expand_redact(kind, V::OriginalSync, variants, ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
res.extend(
|
||||||
|
expand_from_full_event(kind, V::Original, variants)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
res.extend(
|
||||||
|
expand_into_full_event(kind, V::OriginalSync, variants, ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
res.extend(
|
||||||
|
expand_from_full_event(kind, V::Redacted, variants)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
res.extend(
|
||||||
|
expand_into_full_event(kind, V::RedactedSync, variants, ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
res.extend(
|
||||||
|
expand_event_enum(kind, V::None, events, attrs, variants, ruma_common)
|
||||||
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if matches!(kind, EventKind::Ephemeral) {
|
||||||
res.extend(
|
res.extend(
|
||||||
expand_event_enum(kind, V::Sync, events, attrs, variants, ruma_common)
|
expand_event_enum(kind, V::Sync, events, attrs, variants, ruma_common)
|
||||||
.unwrap_or_else(syn::Error::into_compile_error),
|
.unwrap_or_else(syn::Error::into_compile_error),
|
||||||
);
|
);
|
||||||
res.extend(
|
|
||||||
expand_from_full_event(kind, V::Full, variants)
|
|
||||||
.unwrap_or_else(syn::Error::into_compile_error),
|
|
||||||
);
|
|
||||||
res.extend(
|
|
||||||
expand_into_full_event(kind, V::Sync, variants, ruma_common)
|
|
||||||
.unwrap_or_else(syn::Error::into_compile_error),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if matches!(kind, EventKind::State) {
|
if matches!(kind, EventKind::State) {
|
||||||
@ -80,33 +121,6 @@ pub fn expand_event_enums(input: &EventEnumDecl) -> syn::Result<TokenStream> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if matches!(kind, EventKind::MessageLike | EventKind::State) {
|
|
||||||
res.extend(
|
|
||||||
expand_event_enum(kind, V::Redacted, events, attrs, variants, ruma_common)
|
|
||||||
.unwrap_or_else(syn::Error::into_compile_error),
|
|
||||||
);
|
|
||||||
res.extend(
|
|
||||||
expand_event_enum(kind, V::RedactedSync, events, attrs, variants, ruma_common)
|
|
||||||
.unwrap_or_else(syn::Error::into_compile_error),
|
|
||||||
);
|
|
||||||
res.extend(
|
|
||||||
expand_redact(kind, V::Full, variants, ruma_common)
|
|
||||||
.unwrap_or_else(syn::Error::into_compile_error),
|
|
||||||
);
|
|
||||||
res.extend(
|
|
||||||
expand_redact(kind, V::Sync, variants, ruma_common)
|
|
||||||
.unwrap_or_else(syn::Error::into_compile_error),
|
|
||||||
);
|
|
||||||
res.extend(
|
|
||||||
expand_from_full_event(kind, V::Redacted, variants)
|
|
||||||
.unwrap_or_else(syn::Error::into_compile_error),
|
|
||||||
);
|
|
||||||
res.extend(
|
|
||||||
expand_into_full_event(kind, V::RedactedSync, variants, ruma_common)
|
|
||||||
.unwrap_or_else(syn::Error::into_compile_error),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(res)
|
Ok(res)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -401,7 +415,7 @@ fn expand_redact(
|
|||||||
|
|
||||||
fn redact(
|
fn redact(
|
||||||
self,
|
self,
|
||||||
redaction: #ruma_common::events::room::redaction::SyncRoomRedactionEvent,
|
redaction: #ruma_common::events::room::redaction::OriginalSyncRoomRedactionEvent,
|
||||||
version: &#ruma_common::RoomVersionId,
|
version: &#ruma_common::RoomVersionId,
|
||||||
) -> #redacted_enum {
|
) -> #redacted_enum {
|
||||||
match self {
|
match self {
|
||||||
@ -546,7 +560,7 @@ fn to_event_path(
|
|||||||
let path = event_module_path(name);
|
let path = event_module_path(name);
|
||||||
let event = m_prefix_name_to_type_name(name).unwrap();
|
let event = m_prefix_name_to_type_name(name).unwrap();
|
||||||
let event_name = if kind == EventKind::ToDevice {
|
let event_name = if kind == EventKind::ToDevice {
|
||||||
assert_eq!(var, EventKindVariation::Full);
|
assert_eq!(var, EventKindVariation::None);
|
||||||
format_ident!("ToDevice{}Event", event)
|
format_ident!("ToDevice{}Event", event)
|
||||||
} else {
|
} else {
|
||||||
format_ident!("{}{}Event", var, event)
|
format_ident!("{}{}Event", var, event)
|
||||||
|
@ -19,8 +19,10 @@ mod kw {
|
|||||||
// If the variants of this enum change `to_event_path` needs to be updated as well.
|
// If the variants of this enum change `to_event_path` needs to be updated as well.
|
||||||
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
|
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
|
||||||
pub enum EventKindVariation {
|
pub enum EventKindVariation {
|
||||||
Full,
|
None,
|
||||||
Sync,
|
Sync,
|
||||||
|
Original,
|
||||||
|
OriginalSync,
|
||||||
Stripped,
|
Stripped,
|
||||||
Initial,
|
Initial,
|
||||||
Redacted,
|
Redacted,
|
||||||
@ -30,8 +32,10 @@ pub enum EventKindVariation {
|
|||||||
impl fmt::Display for EventKindVariation {
|
impl fmt::Display for EventKindVariation {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
match self {
|
match self {
|
||||||
EventKindVariation::Full => write!(f, ""),
|
EventKindVariation::None => write!(f, ""),
|
||||||
EventKindVariation::Sync => write!(f, "Sync"),
|
EventKindVariation::Sync => write!(f, "Sync"),
|
||||||
|
EventKindVariation::Original => write!(f, "Original"),
|
||||||
|
EventKindVariation::OriginalSync => write!(f, "OriginalSync"),
|
||||||
EventKindVariation::Stripped => write!(f, "Stripped"),
|
EventKindVariation::Stripped => write!(f, "Stripped"),
|
||||||
EventKindVariation::Initial => write!(f, "Initial"),
|
EventKindVariation::Initial => write!(f, "Initial"),
|
||||||
EventKindVariation::Redacted => write!(f, "Redacted"),
|
EventKindVariation::Redacted => write!(f, "Redacted"),
|
||||||
@ -46,20 +50,20 @@ impl EventKindVariation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_sync(self) -> bool {
|
pub fn is_sync(self) -> bool {
|
||||||
matches!(self, Self::Sync | Self::RedactedSync)
|
matches!(self, Self::OriginalSync | Self::RedactedSync)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn to_redacted(self) -> Self {
|
pub fn to_redacted(self) -> Self {
|
||||||
match self {
|
match self {
|
||||||
EventKindVariation::Full => EventKindVariation::Redacted,
|
EventKindVariation::Original => EventKindVariation::Redacted,
|
||||||
EventKindVariation::Sync => EventKindVariation::RedactedSync,
|
EventKindVariation::OriginalSync => EventKindVariation::RedactedSync,
|
||||||
_ => panic!("No redacted form of {:?}", self),
|
_ => panic!("No redacted form of {:?}", self),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn to_sync(self) -> Self {
|
pub fn to_sync(self) -> Self {
|
||||||
match self {
|
match self {
|
||||||
EventKindVariation::Full => EventKindVariation::Sync,
|
EventKindVariation::Original => EventKindVariation::OriginalSync,
|
||||||
EventKindVariation::Redacted => EventKindVariation::RedactedSync,
|
EventKindVariation::Redacted => EventKindVariation::RedactedSync,
|
||||||
_ => panic!("No sync form of {:?}", self),
|
_ => panic!("No sync form of {:?}", self),
|
||||||
}
|
}
|
||||||
@ -67,9 +71,9 @@ impl EventKindVariation {
|
|||||||
|
|
||||||
pub fn to_full(self) -> Self {
|
pub fn to_full(self) -> Self {
|
||||||
match self {
|
match self {
|
||||||
EventKindVariation::Sync => EventKindVariation::Full,
|
EventKindVariation::OriginalSync => EventKindVariation::Original,
|
||||||
EventKindVariation::RedactedSync => EventKindVariation::Redacted,
|
EventKindVariation::RedactedSync => EventKindVariation::Redacted,
|
||||||
_ => panic!("No full form of {:?}", self),
|
_ => panic!("No original (unredacted) form of {:?}", self),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -127,11 +131,20 @@ impl EventKind {
|
|||||||
use EventKindVariation as V;
|
use EventKindVariation as V;
|
||||||
|
|
||||||
match (self, var) {
|
match (self, var) {
|
||||||
(_, V::Full)
|
(
|
||||||
| (Self::MessageLike | Self::RoomRedaction | Self::State | Self::Ephemeral, V::Sync)
|
Self::GlobalAccountData
|
||||||
|
| Self::RoomAccountData
|
||||||
|
| Self::Ephemeral
|
||||||
|
| Self::ToDevice
|
||||||
|
| Self::Presence
|
||||||
|
| Self::HierarchySpaceChild
|
||||||
|
| Self::Decrypted,
|
||||||
|
V::None,
|
||||||
|
)
|
||||||
|
| (Self::Ephemeral, V::Sync)
|
||||||
| (
|
| (
|
||||||
Self::MessageLike | Self::RoomRedaction | Self::State,
|
Self::MessageLike | Self::RoomRedaction | Self::State,
|
||||||
V::Redacted | V::RedactedSync,
|
V::Original | V::OriginalSync | V::Redacted | V::RedactedSync,
|
||||||
)
|
)
|
||||||
| (Self::State, V::Stripped | V::Initial) => Ok(format_ident!("{}{}", var, self)),
|
| (Self::State, V::Stripped | V::Initial) => Ok(format_ident!("{}{}", var, self)),
|
||||||
_ => Err(syn::Error::new(
|
_ => Err(syn::Error::new(
|
||||||
@ -188,29 +201,33 @@ impl Parse for EventKind {
|
|||||||
pub fn to_kind_variation(ident: &Ident) -> Option<(EventKind, EventKindVariation)> {
|
pub fn to_kind_variation(ident: &Ident) -> Option<(EventKind, EventKindVariation)> {
|
||||||
let ident_str = ident.to_string();
|
let ident_str = ident.to_string();
|
||||||
match ident_str.as_str() {
|
match ident_str.as_str() {
|
||||||
"GlobalAccountDataEvent" => Some((EventKind::GlobalAccountData, EventKindVariation::Full)),
|
"GlobalAccountDataEvent" => Some((EventKind::GlobalAccountData, EventKindVariation::None)),
|
||||||
"RoomAccountDataEvent" => Some((EventKind::RoomAccountData, EventKindVariation::Full)),
|
"RoomAccountDataEvent" => Some((EventKind::RoomAccountData, EventKindVariation::None)),
|
||||||
"EphemeralRoomEvent" => Some((EventKind::Ephemeral, EventKindVariation::Full)),
|
"EphemeralRoomEvent" => Some((EventKind::Ephemeral, EventKindVariation::None)),
|
||||||
"SyncEphemeralRoomEvent" => Some((EventKind::Ephemeral, EventKindVariation::Sync)),
|
"SyncEphemeralRoomEvent" => Some((EventKind::Ephemeral, EventKindVariation::Sync)),
|
||||||
"MessageLikeEvent" => Some((EventKind::MessageLike, EventKindVariation::Full)),
|
"OriginalMessageLikeEvent" => Some((EventKind::MessageLike, EventKindVariation::Original)),
|
||||||
"SyncMessageLikeEvent" => Some((EventKind::MessageLike, EventKindVariation::Sync)),
|
"OriginalSyncMessageLikeEvent" => {
|
||||||
|
Some((EventKind::MessageLike, EventKindVariation::OriginalSync))
|
||||||
|
}
|
||||||
"RedactedMessageLikeEvent" => Some((EventKind::MessageLike, EventKindVariation::Redacted)),
|
"RedactedMessageLikeEvent" => Some((EventKind::MessageLike, EventKindVariation::Redacted)),
|
||||||
"RedactedSyncMessageLikeEvent" => {
|
"RedactedSyncMessageLikeEvent" => {
|
||||||
Some((EventKind::MessageLike, EventKindVariation::RedactedSync))
|
Some((EventKind::MessageLike, EventKindVariation::RedactedSync))
|
||||||
}
|
}
|
||||||
"StateEvent" => Some((EventKind::State, EventKindVariation::Full)),
|
"OriginalStateEvent" => Some((EventKind::State, EventKindVariation::Original)),
|
||||||
"SyncStateEvent" => Some((EventKind::State, EventKindVariation::Sync)),
|
"OriginalSyncStateEvent" => Some((EventKind::State, EventKindVariation::OriginalSync)),
|
||||||
"StrippedStateEvent" => Some((EventKind::State, EventKindVariation::Stripped)),
|
"StrippedStateEvent" => Some((EventKind::State, EventKindVariation::Stripped)),
|
||||||
"InitialStateEvent" => Some((EventKind::State, EventKindVariation::Initial)),
|
"InitialStateEvent" => Some((EventKind::State, EventKindVariation::Initial)),
|
||||||
"RedactedStateEvent" => Some((EventKind::State, EventKindVariation::Redacted)),
|
"RedactedStateEvent" => Some((EventKind::State, EventKindVariation::Redacted)),
|
||||||
"RedactedSyncStateEvent" => Some((EventKind::State, EventKindVariation::RedactedSync)),
|
"RedactedSyncStateEvent" => Some((EventKind::State, EventKindVariation::RedactedSync)),
|
||||||
"ToDeviceEvent" => Some((EventKind::ToDevice, EventKindVariation::Full)),
|
"ToDeviceEvent" => Some((EventKind::ToDevice, EventKindVariation::None)),
|
||||||
"PresenceEvent" => Some((EventKind::Presence, EventKindVariation::Full)),
|
"PresenceEvent" => Some((EventKind::Presence, EventKindVariation::None)),
|
||||||
"HierarchySpaceChildEvent" => {
|
"HierarchySpaceChildEvent" => {
|
||||||
Some((EventKind::HierarchySpaceChild, EventKindVariation::Stripped))
|
Some((EventKind::HierarchySpaceChild, EventKindVariation::Stripped))
|
||||||
}
|
}
|
||||||
"RoomRedactionEvent" => Some((EventKind::RoomRedaction, EventKindVariation::Full)),
|
"OriginalRoomRedactionEvent" => Some((EventKind::RoomRedaction, EventKindVariation::None)),
|
||||||
"SyncRoomRedactionEvent" => Some((EventKind::RoomRedaction, EventKindVariation::Sync)),
|
"OriginalSyncRoomRedactionEvent" => {
|
||||||
|
Some((EventKind::RoomRedaction, EventKindVariation::OriginalSync))
|
||||||
|
}
|
||||||
"RedactedRoomRedactionEvent" => {
|
"RedactedRoomRedactionEvent" => {
|
||||||
Some((EventKind::RoomRedaction, EventKindVariation::Redacted))
|
Some((EventKind::RoomRedaction, EventKindVariation::Redacted))
|
||||||
}
|
}
|
||||||
@ -218,7 +235,7 @@ pub fn to_kind_variation(ident: &Ident) -> Option<(EventKind, EventKindVariation
|
|||||||
Some((EventKind::RoomRedaction, EventKindVariation::RedactedSync))
|
Some((EventKind::RoomRedaction, EventKindVariation::RedactedSync))
|
||||||
}
|
}
|
||||||
"DecryptedOlmV1Event" | "DecryptedMegolmV1Event" => {
|
"DecryptedOlmV1Event" | "DecryptedMegolmV1Event" => {
|
||||||
Some((EventKind::Decrypted, EventKindVariation::Full))
|
Some((EventKind::Decrypted, EventKindVariation::None))
|
||||||
}
|
}
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
|
@ -4,8 +4,8 @@ pub(crate) fn is_non_stripped_room_event(kind: EventKind, var: EventKindVariatio
|
|||||||
matches!(kind, EventKind::MessageLike | EventKind::State)
|
matches!(kind, EventKind::MessageLike | EventKind::State)
|
||||||
&& matches!(
|
&& matches!(
|
||||||
var,
|
var,
|
||||||
EventKindVariation::Full
|
EventKindVariation::Original
|
||||||
| EventKindVariation::Sync
|
| EventKindVariation::OriginalSync
|
||||||
| EventKindVariation::Redacted
|
| EventKindVariation::Redacted
|
||||||
| EventKindVariation::RedactedSync
|
| EventKindVariation::RedactedSync
|
||||||
)
|
)
|
||||||
@ -13,5 +13,5 @@ pub(crate) fn is_non_stripped_room_event(kind: EventKind, var: EventKindVariatio
|
|||||||
|
|
||||||
pub(crate) fn has_prev_content(kind: EventKind, var: EventKindVariation) -> bool {
|
pub(crate) fn has_prev_content(kind: EventKind, var: EventKindVariation) -> bool {
|
||||||
matches!(kind, EventKind::State)
|
matches!(kind, EventKind::State)
|
||||||
&& matches!(var, EventKindVariation::Full | EventKindVariation::Sync)
|
&& matches!(var, EventKindVariation::Original | EventKindVariation::OriginalSync)
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ pub trait Event {
|
|||||||
/// A mapping of event type and state_key to some value `T`, usually an `EventId`.
|
/// A mapping of event type and state_key to some value `T`, usually an `EventId`.
|
||||||
pub type StateMap<T> = BTreeMap<(EventType, Option<String>), T>;
|
pub type StateMap<T> = BTreeMap<(EventType, Option<String>), T>;
|
||||||
|
|
||||||
/// A mapping of `EventId` to `T`, usually a `StateEvent`.
|
/// A mapping of `EventId` to `T`, usually a `OriginalStateEvent`.
|
||||||
pub type EventMap<T> = BTreeMap<Box<EventId>, T>;
|
pub type EventMap<T> = BTreeMap<Box<EventId>, T>;
|
||||||
|
|
||||||
struct StateResolution {
|
struct StateResolution {
|
||||||
|
@ -18,7 +18,7 @@ use std::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use criterion::{criterion_group, criterion_main, Criterion};
|
use criterion::{criterion_group, criterion_main, Criterion};
|
||||||
use event::StateEvent;
|
use event::OriginalStateEvent;
|
||||||
use js_int::{int, uint};
|
use js_int::{int, uint};
|
||||||
use maplit::{btreemap, hashmap, hashset};
|
use maplit::{btreemap, hashmap, hashset};
|
||||||
use ruma_common::{
|
use ruma_common::{
|
||||||
@ -232,7 +232,7 @@ impl<E: Event> TestStore<E> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TestStore<StateEvent> {
|
impl TestStore<OriginalStateEvent> {
|
||||||
#[allow(clippy::type_complexity)]
|
#[allow(clippy::type_complexity)]
|
||||||
fn set_up(
|
fn set_up(
|
||||||
&mut self,
|
&mut self,
|
||||||
@ -372,7 +372,7 @@ fn to_pdu_event<S>(
|
|||||||
content: Box<RawJsonValue>,
|
content: Box<RawJsonValue>,
|
||||||
auth_events: &[S],
|
auth_events: &[S],
|
||||||
prev_events: &[S],
|
prev_events: &[S],
|
||||||
) -> Arc<StateEvent>
|
) -> Arc<OriginalStateEvent>
|
||||||
where
|
where
|
||||||
S: AsRef<str>,
|
S: AsRef<str>,
|
||||||
{
|
{
|
||||||
@ -384,7 +384,7 @@ where
|
|||||||
let prev_events = prev_events.iter().map(AsRef::as_ref).map(event_id).collect::<Vec<_>>();
|
let prev_events = prev_events.iter().map(AsRef::as_ref).map(event_id).collect::<Vec<_>>();
|
||||||
|
|
||||||
let state_key = state_key.map(ToOwned::to_owned);
|
let state_key = state_key.map(ToOwned::to_owned);
|
||||||
Arc::new(StateEvent {
|
Arc::new(OriginalStateEvent {
|
||||||
event_id: id.try_into().unwrap(),
|
event_id: id.try_into().unwrap(),
|
||||||
rest: Pdu::RoomV3Pdu(RoomV3Pdu {
|
rest: Pdu::RoomV3Pdu(RoomV3Pdu {
|
||||||
room_id: room_id().to_owned(),
|
room_id: room_id().to_owned(),
|
||||||
@ -406,7 +406,7 @@ where
|
|||||||
|
|
||||||
// all graphs start with these input events
|
// all graphs start with these input events
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
fn INITIAL_EVENTS() -> HashMap<Box<EventId>, Arc<StateEvent>> {
|
fn INITIAL_EVENTS() -> HashMap<Box<EventId>, Arc<OriginalStateEvent>> {
|
||||||
vec![
|
vec![
|
||||||
to_pdu_event::<&EventId>(
|
to_pdu_event::<&EventId>(
|
||||||
"CREATE",
|
"CREATE",
|
||||||
@ -488,7 +488,7 @@ fn INITIAL_EVENTS() -> HashMap<Box<EventId>, Arc<StateEvent>> {
|
|||||||
|
|
||||||
// all graphs start with these input events
|
// all graphs start with these input events
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
fn BAN_STATE_SET() -> HashMap<Box<EventId>, Arc<StateEvent>> {
|
fn BAN_STATE_SET() -> HashMap<Box<EventId>, Arc<OriginalStateEvent>> {
|
||||||
vec![
|
vec![
|
||||||
to_pdu_event(
|
to_pdu_event(
|
||||||
"PA",
|
"PA",
|
||||||
@ -541,7 +541,7 @@ mod event {
|
|||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use serde_json::value::RawValue as RawJsonValue;
|
use serde_json::value::RawValue as RawJsonValue;
|
||||||
|
|
||||||
impl Event for StateEvent {
|
impl Event for OriginalStateEvent {
|
||||||
type Id = Box<EventId>;
|
type Id = Box<EventId>;
|
||||||
|
|
||||||
fn event_id(&self) -> &Self::Id {
|
fn event_id(&self) -> &Self::Id {
|
||||||
@ -631,7 +631,7 @@ mod event {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||||
pub struct StateEvent {
|
pub struct OriginalStateEvent {
|
||||||
pub event_id: Box<EventId>,
|
pub event_id: Box<EventId>,
|
||||||
#[serde(flatten)]
|
#[serde(flatten)]
|
||||||
pub rest: Pdu,
|
pub rest: Pdu,
|
||||||
|
@ -982,7 +982,7 @@ mod tests {
|
|||||||
event_auth::valid_membership_change,
|
event_auth::valid_membership_change,
|
||||||
test_utils::{
|
test_utils::{
|
||||||
alice, charlie, ella, event_id, member_content_ban, member_content_join, room_id,
|
alice, charlie, ella, event_id, member_content_ban, member_content_join, room_id,
|
||||||
to_pdu_event, StateEvent, INITIAL_EVENTS, INITIAL_EVENTS_CREATE_ROOM,
|
to_pdu_event, OriginalStateEvent, INITIAL_EVENTS, INITIAL_EVENTS_CREATE_ROOM,
|
||||||
},
|
},
|
||||||
Event, RoomVersion, StateMap,
|
Event, RoomVersion, StateMap,
|
||||||
};
|
};
|
||||||
@ -1021,7 +1021,7 @@ mod tests {
|
|||||||
&sender,
|
&sender,
|
||||||
fetch_state(RoomEventType::RoomMember, sender.to_string()),
|
fetch_state(RoomEventType::RoomMember, sender.to_string()),
|
||||||
&requester,
|
&requester,
|
||||||
None::<StateEvent>,
|
None::<OriginalStateEvent>,
|
||||||
fetch_state(RoomEventType::RoomPowerLevels, "".to_owned()),
|
fetch_state(RoomEventType::RoomPowerLevels, "".to_owned()),
|
||||||
fetch_state(RoomEventType::RoomJoinRules, "".to_owned()),
|
fetch_state(RoomEventType::RoomJoinRules, "".to_owned()),
|
||||||
None,
|
None,
|
||||||
@ -1065,7 +1065,7 @@ mod tests {
|
|||||||
&sender,
|
&sender,
|
||||||
fetch_state(RoomEventType::RoomMember, sender.to_string()),
|
fetch_state(RoomEventType::RoomMember, sender.to_string()),
|
||||||
&requester,
|
&requester,
|
||||||
None::<StateEvent>,
|
None::<OriginalStateEvent>,
|
||||||
fetch_state(RoomEventType::RoomPowerLevels, "".to_owned()),
|
fetch_state(RoomEventType::RoomPowerLevels, "".to_owned()),
|
||||||
fetch_state(RoomEventType::RoomJoinRules, "".to_owned()),
|
fetch_state(RoomEventType::RoomJoinRules, "".to_owned()),
|
||||||
None,
|
None,
|
||||||
@ -1109,7 +1109,7 @@ mod tests {
|
|||||||
&sender,
|
&sender,
|
||||||
fetch_state(RoomEventType::RoomMember, sender.to_string()),
|
fetch_state(RoomEventType::RoomMember, sender.to_string()),
|
||||||
&requester,
|
&requester,
|
||||||
None::<StateEvent>,
|
None::<OriginalStateEvent>,
|
||||||
fetch_state(RoomEventType::RoomPowerLevels, "".to_owned()),
|
fetch_state(RoomEventType::RoomPowerLevels, "".to_owned()),
|
||||||
fetch_state(RoomEventType::RoomJoinRules, "".to_owned()),
|
fetch_state(RoomEventType::RoomJoinRules, "".to_owned()),
|
||||||
None,
|
None,
|
||||||
@ -1153,7 +1153,7 @@ mod tests {
|
|||||||
&sender,
|
&sender,
|
||||||
fetch_state(RoomEventType::RoomMember, sender.to_string()),
|
fetch_state(RoomEventType::RoomMember, sender.to_string()),
|
||||||
&requester,
|
&requester,
|
||||||
None::<StateEvent>,
|
None::<OriginalStateEvent>,
|
||||||
fetch_state(RoomEventType::RoomPowerLevels, "".to_owned()),
|
fetch_state(RoomEventType::RoomPowerLevels, "".to_owned()),
|
||||||
fetch_state(RoomEventType::RoomJoinRules, "".to_owned()),
|
fetch_state(RoomEventType::RoomJoinRules, "".to_owned()),
|
||||||
None,
|
None,
|
||||||
@ -1214,7 +1214,7 @@ mod tests {
|
|||||||
&sender,
|
&sender,
|
||||||
fetch_state(RoomEventType::RoomMember, sender.to_string()),
|
fetch_state(RoomEventType::RoomMember, sender.to_string()),
|
||||||
&requester,
|
&requester,
|
||||||
None::<StateEvent>,
|
None::<OriginalStateEvent>,
|
||||||
fetch_state(RoomEventType::RoomPowerLevels, "".to_owned()),
|
fetch_state(RoomEventType::RoomPowerLevels, "".to_owned()),
|
||||||
fetch_state(RoomEventType::RoomJoinRules, "".to_owned()),
|
fetch_state(RoomEventType::RoomJoinRules, "".to_owned()),
|
||||||
Some(&alice()),
|
Some(&alice()),
|
||||||
@ -1230,7 +1230,7 @@ mod tests {
|
|||||||
&sender,
|
&sender,
|
||||||
fetch_state(RoomEventType::RoomMember, sender.to_string()),
|
fetch_state(RoomEventType::RoomMember, sender.to_string()),
|
||||||
&requester,
|
&requester,
|
||||||
None::<StateEvent>,
|
None::<OriginalStateEvent>,
|
||||||
fetch_state(RoomEventType::RoomPowerLevels, "".to_owned()),
|
fetch_state(RoomEventType::RoomPowerLevels, "".to_owned()),
|
||||||
fetch_state(RoomEventType::RoomJoinRules, "".to_owned()),
|
fetch_state(RoomEventType::RoomJoinRules, "".to_owned()),
|
||||||
Some(&ella()),
|
Some(&ella()),
|
||||||
@ -1283,7 +1283,7 @@ mod tests {
|
|||||||
&sender,
|
&sender,
|
||||||
fetch_state(RoomEventType::RoomMember, sender.to_string()),
|
fetch_state(RoomEventType::RoomMember, sender.to_string()),
|
||||||
&requester,
|
&requester,
|
||||||
None::<StateEvent>,
|
None::<OriginalStateEvent>,
|
||||||
fetch_state(RoomEventType::RoomPowerLevels, "".to_owned()),
|
fetch_state(RoomEventType::RoomPowerLevels, "".to_owned()),
|
||||||
fetch_state(RoomEventType::RoomJoinRules, "".to_owned()),
|
fetch_state(RoomEventType::RoomJoinRules, "".to_owned()),
|
||||||
None,
|
None,
|
||||||
|
@ -657,7 +657,8 @@ mod tests {
|
|||||||
room_version::RoomVersion,
|
room_version::RoomVersion,
|
||||||
test_utils::{
|
test_utils::{
|
||||||
alice, bob, charlie, do_check, ella, event_id, member_content_ban, member_content_join,
|
alice, bob, charlie, do_check, ella, event_id, member_content_ban, member_content_join,
|
||||||
room_id, to_init_pdu_event, to_pdu_event, zara, StateEvent, TestStore, INITIAL_EVENTS,
|
room_id, to_init_pdu_event, to_pdu_event, zara, OriginalStateEvent, TestStore,
|
||||||
|
INITIAL_EVENTS,
|
||||||
},
|
},
|
||||||
Event, StateMap,
|
Event, StateMap,
|
||||||
};
|
};
|
||||||
@ -1042,7 +1043,7 @@ mod tests {
|
|||||||
let _ =
|
let _ =
|
||||||
tracing::subscriber::set_default(tracing_subscriber::fmt().with_test_writer().finish());
|
tracing::subscriber::set_default(tracing_subscriber::fmt().with_test_writer().finish());
|
||||||
|
|
||||||
let mut store = TestStore::<StateEvent>(hashmap! {});
|
let mut store = TestStore::<OriginalStateEvent>(hashmap! {});
|
||||||
|
|
||||||
// build up the DAG
|
// build up the DAG
|
||||||
let (state_at_bob, state_at_charlie, expected) = store.set_up();
|
let (state_at_bob, state_at_charlie, expected) = store.set_up();
|
||||||
@ -1208,7 +1209,7 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
fn BAN_STATE_SET() -> HashMap<Box<EventId>, Arc<StateEvent>> {
|
fn BAN_STATE_SET() -> HashMap<Box<EventId>, Arc<OriginalStateEvent>> {
|
||||||
vec![
|
vec![
|
||||||
to_pdu_event(
|
to_pdu_event(
|
||||||
"PA",
|
"PA",
|
||||||
@ -1253,7 +1254,7 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
fn JOIN_RULE() -> HashMap<Box<EventId>, Arc<StateEvent>> {
|
fn JOIN_RULE() -> HashMap<Box<EventId>, Arc<OriginalStateEvent>> {
|
||||||
vec![
|
vec![
|
||||||
to_pdu_event(
|
to_pdu_event(
|
||||||
"JR",
|
"JR",
|
||||||
|
@ -29,12 +29,12 @@ use tracing::info;
|
|||||||
|
|
||||||
use crate::{auth_types_for_event, Error, Event, Result, StateMap};
|
use crate::{auth_types_for_event, Error, Event, Result, StateMap};
|
||||||
|
|
||||||
pub use event::StateEvent;
|
pub use event::OriginalStateEvent;
|
||||||
|
|
||||||
static SERVER_TIMESTAMP: AtomicU64 = AtomicU64::new(0);
|
static SERVER_TIMESTAMP: AtomicU64 = AtomicU64::new(0);
|
||||||
|
|
||||||
pub fn do_check(
|
pub fn do_check(
|
||||||
events: &[Arc<StateEvent>],
|
events: &[Arc<OriginalStateEvent>],
|
||||||
edges: Vec<Vec<Box<EventId>>>,
|
edges: Vec<Vec<Box<EventId>>>,
|
||||||
expected_state_ids: Vec<Box<EventId>>,
|
expected_state_ids: Vec<Box<EventId>>,
|
||||||
) {
|
) {
|
||||||
@ -52,7 +52,7 @@ pub fn do_check(
|
|||||||
|
|
||||||
// This will be lexi_topo_sorted for resolution
|
// This will be lexi_topo_sorted for resolution
|
||||||
let mut graph = HashMap::new();
|
let mut graph = HashMap::new();
|
||||||
// This is the same as in `resolve` event_id -> StateEvent
|
// This is the same as in `resolve` event_id -> OriginalStateEvent
|
||||||
let mut fake_event_map = HashMap::new();
|
let mut fake_event_map = HashMap::new();
|
||||||
|
|
||||||
// Create the DB of events that led up to this point
|
// Create the DB of events that led up to this point
|
||||||
@ -76,8 +76,8 @@ pub fn do_check(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// event_id -> StateEvent
|
// event_id -> OriginalStateEvent
|
||||||
let mut event_map: HashMap<Box<EventId>, Arc<StateEvent>> = HashMap::new();
|
let mut event_map: HashMap<Box<EventId>, Arc<OriginalStateEvent>> = HashMap::new();
|
||||||
// event_id -> StateMap<Box<EventId>>
|
// event_id -> StateMap<Box<EventId>>
|
||||||
let mut state_at_event: HashMap<Box<EventId>, StateMap<Box<EventId>>> = HashMap::new();
|
let mut state_at_event: HashMap<Box<EventId>, StateMap<Box<EventId>>> = HashMap::new();
|
||||||
|
|
||||||
@ -245,7 +245,7 @@ impl<E: Event> TestStore<E> {
|
|||||||
|
|
||||||
// A StateStore implementation for testing
|
// A StateStore implementation for testing
|
||||||
#[allow(clippy::type_complexity)]
|
#[allow(clippy::type_complexity)]
|
||||||
impl TestStore<StateEvent> {
|
impl TestStore<OriginalStateEvent> {
|
||||||
pub fn set_up(
|
pub fn set_up(
|
||||||
&mut self,
|
&mut self,
|
||||||
) -> (StateMap<Box<EventId>>, StateMap<Box<EventId>>, StateMap<Box<EventId>>) {
|
) -> (StateMap<Box<EventId>>, StateMap<Box<EventId>>, StateMap<Box<EventId>>) {
|
||||||
@ -387,12 +387,12 @@ pub fn to_init_pdu_event(
|
|||||||
ev_type: RoomEventType,
|
ev_type: RoomEventType,
|
||||||
state_key: Option<&str>,
|
state_key: Option<&str>,
|
||||||
content: Box<RawJsonValue>,
|
content: Box<RawJsonValue>,
|
||||||
) -> Arc<StateEvent> {
|
) -> Arc<OriginalStateEvent> {
|
||||||
let ts = SERVER_TIMESTAMP.fetch_add(1, SeqCst);
|
let ts = SERVER_TIMESTAMP.fetch_add(1, SeqCst);
|
||||||
let id = if id.contains('$') { id.to_owned() } else { format!("${}:foo", id) };
|
let id = if id.contains('$') { id.to_owned() } else { format!("${}:foo", id) };
|
||||||
|
|
||||||
let state_key = state_key.map(ToOwned::to_owned);
|
let state_key = state_key.map(ToOwned::to_owned);
|
||||||
Arc::new(StateEvent {
|
Arc::new(OriginalStateEvent {
|
||||||
event_id: id.try_into().unwrap(),
|
event_id: id.try_into().unwrap(),
|
||||||
rest: Pdu::RoomV3Pdu(RoomV3Pdu {
|
rest: Pdu::RoomV3Pdu(RoomV3Pdu {
|
||||||
room_id: room_id().to_owned(),
|
room_id: room_id().to_owned(),
|
||||||
@ -420,7 +420,7 @@ pub fn to_pdu_event<S>(
|
|||||||
content: Box<RawJsonValue>,
|
content: Box<RawJsonValue>,
|
||||||
auth_events: &[S],
|
auth_events: &[S],
|
||||||
prev_events: &[S],
|
prev_events: &[S],
|
||||||
) -> Arc<StateEvent>
|
) -> Arc<OriginalStateEvent>
|
||||||
where
|
where
|
||||||
S: AsRef<str>,
|
S: AsRef<str>,
|
||||||
{
|
{
|
||||||
@ -430,7 +430,7 @@ where
|
|||||||
let prev_events = prev_events.iter().map(AsRef::as_ref).map(event_id).collect::<Vec<_>>();
|
let prev_events = prev_events.iter().map(AsRef::as_ref).map(event_id).collect::<Vec<_>>();
|
||||||
|
|
||||||
let state_key = state_key.map(ToOwned::to_owned);
|
let state_key = state_key.map(ToOwned::to_owned);
|
||||||
Arc::new(StateEvent {
|
Arc::new(OriginalStateEvent {
|
||||||
event_id: id.try_into().unwrap(),
|
event_id: id.try_into().unwrap(),
|
||||||
rest: Pdu::RoomV3Pdu(RoomV3Pdu {
|
rest: Pdu::RoomV3Pdu(RoomV3Pdu {
|
||||||
room_id: room_id().to_owned(),
|
room_id: room_id().to_owned(),
|
||||||
@ -452,7 +452,7 @@ where
|
|||||||
|
|
||||||
// all graphs start with these input events
|
// all graphs start with these input events
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
pub fn INITIAL_EVENTS() -> HashMap<Box<EventId>, Arc<StateEvent>> {
|
pub fn INITIAL_EVENTS() -> HashMap<Box<EventId>, Arc<OriginalStateEvent>> {
|
||||||
vec![
|
vec![
|
||||||
to_pdu_event::<&EventId>(
|
to_pdu_event::<&EventId>(
|
||||||
"CREATE",
|
"CREATE",
|
||||||
@ -534,7 +534,7 @@ pub fn INITIAL_EVENTS() -> HashMap<Box<EventId>, Arc<StateEvent>> {
|
|||||||
|
|
||||||
// all graphs start with these input events
|
// all graphs start with these input events
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
pub fn INITIAL_EVENTS_CREATE_ROOM() -> HashMap<Box<EventId>, Arc<StateEvent>> {
|
pub fn INITIAL_EVENTS_CREATE_ROOM() -> HashMap<Box<EventId>, Arc<OriginalStateEvent>> {
|
||||||
vec![to_pdu_event::<&EventId>(
|
vec![to_pdu_event::<&EventId>(
|
||||||
"CREATE",
|
"CREATE",
|
||||||
alice(),
|
alice(),
|
||||||
@ -567,7 +567,7 @@ pub mod event {
|
|||||||
|
|
||||||
use crate::Event;
|
use crate::Event;
|
||||||
|
|
||||||
impl Event for StateEvent {
|
impl Event for OriginalStateEvent {
|
||||||
type Id = Box<EventId>;
|
type Id = Box<EventId>;
|
||||||
|
|
||||||
fn event_id(&self) -> &Self::Id {
|
fn event_id(&self) -> &Self::Id {
|
||||||
@ -658,13 +658,13 @@ pub mod event {
|
|||||||
|
|
||||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||||
#[allow(clippy::exhaustive_structs)]
|
#[allow(clippy::exhaustive_structs)]
|
||||||
pub struct StateEvent {
|
pub struct OriginalStateEvent {
|
||||||
pub event_id: Box<EventId>,
|
pub event_id: Box<EventId>,
|
||||||
#[serde(flatten)]
|
#[serde(flatten)]
|
||||||
pub rest: Pdu,
|
pub rest: Pdu,
|
||||||
}
|
}
|
||||||
|
|
||||||
//impl StateEvent {
|
//impl OriginalStateEvent {
|
||||||
// pub fn state_key(&self) -> &str {
|
// pub fn state_key(&self) -> &str {
|
||||||
// match &self.rest {
|
// match &self.rest {
|
||||||
// Pdu::RoomV1Pdu(ev) => ev.state_key.as_ref().unwrap(),
|
// Pdu::RoomV1Pdu(ev) => ev.state_key.as_ref().unwrap(),
|
||||||
|
@ -9,7 +9,7 @@ use ruma::{
|
|||||||
assign, client,
|
assign, client,
|
||||||
events::{
|
events::{
|
||||||
room::message::{MessageType, RoomMessageEventContent},
|
room::message::{MessageType, RoomMessageEventContent},
|
||||||
AnySyncMessageLikeEvent, AnySyncRoomEvent,
|
AnyOriginalSyncMessageLikeEvent, AnySyncRoomEvent,
|
||||||
},
|
},
|
||||||
presence::PresenceState,
|
presence::PresenceState,
|
||||||
serde::Raw,
|
serde::Raw,
|
||||||
@ -146,8 +146,9 @@ async fn handle_message(
|
|||||||
room_id: &RoomId,
|
room_id: &RoomId,
|
||||||
bot_user_id: &UserId,
|
bot_user_id: &UserId,
|
||||||
) -> Result<(), Box<dyn Error>> {
|
) -> Result<(), Box<dyn Error>> {
|
||||||
if let Ok(AnySyncRoomEvent::MessageLike(AnySyncMessageLikeEvent::RoomMessage(m))) =
|
if let Ok(AnySyncRoomEvent::OriginalMessageLike(
|
||||||
e.deserialize()
|
AnyOriginalSyncMessageLikeEvent::RoomMessage(m),
|
||||||
|
)) = e.deserialize()
|
||||||
{
|
{
|
||||||
// workaround because Conduit does not implement filtering.
|
// workaround because Conduit does not implement filtering.
|
||||||
if m.sender == bot_user_id {
|
if m.sender == bot_user_id {
|
||||||
|
@ -5,7 +5,7 @@ use ruma::{
|
|||||||
api::client::{filter::FilterDefinition, sync::sync_events},
|
api::client::{filter::FilterDefinition, sync::sync_events},
|
||||||
events::{
|
events::{
|
||||||
room::message::{MessageType, RoomMessageEventContent, TextMessageEventContent},
|
room::message::{MessageType, RoomMessageEventContent, TextMessageEventContent},
|
||||||
AnySyncMessageLikeEvent, AnySyncRoomEvent, SyncMessageLikeEvent,
|
AnyOriginalSyncMessageLikeEvent, AnySyncRoomEvent, OriginalSyncMessageLikeEvent,
|
||||||
},
|
},
|
||||||
presence::PresenceState,
|
presence::PresenceState,
|
||||||
};
|
};
|
||||||
@ -42,8 +42,8 @@ async fn log_messages(
|
|||||||
for (room_id, room) in res.rooms.join {
|
for (room_id, room) in res.rooms.join {
|
||||||
for event in room.timeline.events.into_iter().flat_map(|r| r.deserialize()) {
|
for event in room.timeline.events.into_iter().flat_map(|r| r.deserialize()) {
|
||||||
// Filter out the text messages
|
// Filter out the text messages
|
||||||
if let AnySyncRoomEvent::MessageLike(AnySyncMessageLikeEvent::RoomMessage(
|
if let AnySyncRoomEvent::OriginalMessageLike(
|
||||||
SyncMessageLikeEvent {
|
AnyOriginalSyncMessageLikeEvent::RoomMessage(OriginalSyncMessageLikeEvent {
|
||||||
content:
|
content:
|
||||||
RoomMessageEventContent {
|
RoomMessageEventContent {
|
||||||
msgtype:
|
msgtype:
|
||||||
@ -54,8 +54,8 @@ async fn log_messages(
|
|||||||
},
|
},
|
||||||
sender,
|
sender,
|
||||||
..
|
..
|
||||||
},
|
}),
|
||||||
)) = event
|
) = event
|
||||||
{
|
{
|
||||||
println!("{:?} in {:?}: {}", sender, room_id, msg_body);
|
println!("{:?} in {:?}: {}", sender, room_id, msg_body);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user