diff --git a/crates/ruma-common/src/events/room/message.rs b/crates/ruma-common/src/events/room/message.rs index e690d9d9..eb962505 100644 --- a/crates/ruma-common/src/events/room/message.rs +++ b/crates/ruma-common/src/events/room/message.rs @@ -36,6 +36,7 @@ pub use image::ImageMessageEventContent; pub use key_verification_request::KeyVerificationRequestEventContent; pub use location::{LocationInfo, LocationMessageEventContent}; pub use notice::NoticeMessageEventContent; +pub use relation_serde::deserialize_relation; #[cfg(feature = "unstable-sanitize")] use sanitize::{ remove_plain_reply_fallback, sanitize_html, HtmlSanitizerMode, RemoveReplyFallback, diff --git a/crates/ruma-common/src/events/room/message/relation_serde.rs b/crates/ruma-common/src/events/room/message/relation_serde.rs index 280001de..5652e51c 100644 --- a/crates/ruma-common/src/events/room/message/relation_serde.rs +++ b/crates/ruma-common/src/events/room/message/relation_serde.rs @@ -3,9 +3,24 @@ use serde::{Deserialize, Deserializer, Serialize, Serializer}; use super::{InReplyTo, Relation, Replacement, Thread}; use crate::OwnedEventId; -pub(crate) fn deserialize_relation<'de, D, C>( - deserializer: D, -) -> Result>, D::Error> +/// Deserialize an event's `relates_to` field. +/// +/// Use it like this: +/// ``` +/// # use serde::{Deserialize, Serialize}; +/// use ruma_common::events::room::message::{deserialize_relation, MessageType, Relation}; +/// +/// #[derive(Deserialize, Serialize)] +/// struct MyEventContent { +/// #[serde( +/// flatten, +/// skip_serializing_if = "Option::is_none", +/// deserialize_with = "deserialize_relation" +/// )] +/// relates_to: Option>, +/// } +/// ``` +pub fn deserialize_relation<'de, D, C>(deserializer: D) -> Result>, D::Error> where D: Deserializer<'de>, C: Deserialize<'de>,