From 0935374f5d4028bc6978f4775766131cf02eb750 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Commaille?= Date: Sun, 13 Mar 2022 17:49:15 +0100 Subject: [PATCH] common: Add bundled thread to Relations According to MSC3440 --- crates/ruma-common/src/events/relation.rs | 35 ++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/crates/ruma-common/src/events/relation.rs b/crates/ruma-common/src/events/relation.rs index 5fa05e95..c401a12f 100644 --- a/crates/ruma-common/src/events/relation.rs +++ b/crates/ruma-common/src/events/relation.rs @@ -5,7 +5,8 @@ use std::fmt::Debug; use js_int::UInt; use serde::{Deserialize, Serialize}; -use crate::{EventId, MilliSecondsSinceUnixEpoch, UserId}; +use super::AnySyncMessageLikeEvent; +use crate::{serde::Raw, EventId, MilliSecondsSinceUnixEpoch, UserId}; /// Summary of all reactions with the given key to an event. #[derive(Clone, Debug, Default, Deserialize, PartialEq, Eq, Serialize)] @@ -91,6 +92,33 @@ impl BundledReplacement { } } +/// A bundled thread. +#[derive(Clone, Debug, Deserialize, Serialize)] +#[cfg(feature = "unstable-msc3440")] +#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)] +pub struct BundledThread { + /// The latest event in the thread. + pub latest_event: Box>, + + /// The number of events in the thread. + pub count: UInt, + + /// Whether the current logged in user has participated in the thread. + pub current_user_participated: bool, +} + +#[cfg(feature = "unstable-msc3440")] +impl BundledThread { + /// Creates a new `BundledThread` with the given event, count and user participated flag. + pub fn new( + latest_event: Box>, + count: UInt, + current_user_participated: bool, + ) -> Self { + Self { latest_event, count, current_user_participated } + } +} + /// Precompiled list of relations to this event grouped by relation type. #[derive(Clone, Debug, Default, Deserialize, Serialize)] #[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)] @@ -104,6 +132,11 @@ pub struct Relations { #[cfg(feature = "unstable-msc2676")] #[serde(rename = "m.replace")] pub replace: Option, + + /// Thread relation. + #[cfg(feature = "unstable-msc3440")] + #[serde(rename = "io.element.thread")] + pub thread: Option, } impl Relations {