From 67d0f3cc04a8d1dc4a8a1ec947519967ce11ce26 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Wed, 21 Dec 2022 13:02:53 +0100 Subject: [PATCH] Temporarily add back Serialize implementations for non-DAG events MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit … since they are being used by Conduit. --- crates/ruma-common/src/events/kinds.rs | 49 +++++++++++++++++++++++ crates/ruma-common/src/events/presence.rs | 17 +++++++- 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/crates/ruma-common/src/events/kinds.rs b/crates/ruma-common/src/events/kinds.rs index e6309ee9..ba67dcea 100644 --- a/crates/ruma-common/src/events/kinds.rs +++ b/crates/ruma-common/src/events/kinds.rs @@ -23,6 +23,18 @@ pub struct GlobalAccountDataEvent { pub content: C, } +impl Serialize for GlobalAccountDataEvent { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + let mut state = serializer.serialize_struct("GlobalAccountDataEvent", 2)?; + state.serialize_field("type", &self.content.event_type())?; + state.serialize_field("content", &self.content)?; + state.end() + } +} + /// A room account data event. #[derive(Clone, Debug, Event)] pub struct RoomAccountDataEvent { @@ -30,6 +42,18 @@ pub struct RoomAccountDataEvent { pub content: C, } +impl Serialize for RoomAccountDataEvent { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + let mut state = serializer.serialize_struct("RoomAccountDataEvent", 2)?; + state.serialize_field("type", &self.content.event_type())?; + state.serialize_field("content", &self.content)?; + state.end() + } +} + /// An ephemeral room event. #[derive(Clone, Debug, Event)] pub struct EphemeralRoomEvent { @@ -40,6 +64,19 @@ pub struct EphemeralRoomEvent { pub room_id: OwnedRoomId, } +impl Serialize for EphemeralRoomEvent { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + let mut state = serializer.serialize_struct("EphemeralRoomEvent", 2)?; + state.serialize_field("type", &self.content.event_type())?; + state.serialize_field("content", &self.content)?; + state.serialize_field("room_id", &self.room_id)?; + state.end() + } +} + /// An ephemeral room event without a `room_id`. #[derive(Clone, Debug, Event)] pub struct SyncEphemeralRoomEvent { @@ -47,6 +84,18 @@ pub struct SyncEphemeralRoomEvent { pub content: C, } +impl Serialize for SyncEphemeralRoomEvent { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + let mut state = serializer.serialize_struct("SyncEphemeralRoomEvent", 2)?; + state.serialize_field("type", &self.content.event_type())?; + state.serialize_field("content", &self.content)?; + state.end() + } +} + /// An unredacted message-like event. /// /// `OriginalMessageLikeEvent` implements the comparison traits using only the `event_id` field, a diff --git a/crates/ruma-common/src/events/presence.rs b/crates/ruma-common/src/events/presence.rs index efdd8be7..c46b3b3c 100644 --- a/crates/ruma-common/src/events/presence.rs +++ b/crates/ruma-common/src/events/presence.rs @@ -4,9 +4,9 @@ use js_int::UInt; use ruma_macros::{Event, EventContent}; -use serde::{Deserialize, Serialize}; +use serde::{ser::SerializeStruct, Deserialize, Serialize}; -use super::{EventKind, StaticEventContent}; +use super::{EventContent, EventKind, StaticEventContent}; use crate::{presence::PresenceState, OwnedMxcUri, OwnedUserId}; /// Presence event. @@ -20,6 +20,19 @@ pub struct PresenceEvent { pub sender: OwnedUserId, } +impl Serialize for PresenceEvent { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + let mut state = serializer.serialize_struct("PresenceEvent", 3)?; + state.serialize_field("type", &self.content.event_type())?; + state.serialize_field("content", &self.content)?; + state.serialize_field("sender", &self.sender)?; + state.end() + } +} + /// Informs the room of members presence. /// /// This is the only type a `PresenceEvent` can contain as its `content` field.