From e7ed90ad0f51e98474681985461fd5338c570201 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Mon, 9 Oct 2023 16:23:51 +0200 Subject: [PATCH] events: Add RoomMessageEventContentWithoutRelation::add_mentions --- crates/ruma-events/CHANGELOG.md | 1 + crates/ruma-events/src/lib.rs | 5 +++++ crates/ruma-events/src/room/message.rs | 8 +------- .../ruma-events/src/room/message/without_relation.rs | 12 ++++++++++++ 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/crates/ruma-events/CHANGELOG.md b/crates/ruma-events/CHANGELOG.md index 72bac5aa..72d5fa05 100644 --- a/crates/ruma-events/CHANGELOG.md +++ b/crates/ruma-events/CHANGELOG.md @@ -10,6 +10,7 @@ Improvements: `RoomMessageEventContent`: - `make_reply_to` - `make_reply_to_raw` + - `add_mentions` # 0.27.0 diff --git a/crates/ruma-events/src/lib.rs b/crates/ruma-events/src/lib.rs index 15affb89..b874b0ce 100644 --- a/crates/ruma-events/src/lib.rs +++ b/crates/ruma-events/src/lib.rs @@ -272,6 +272,11 @@ impl Mentions { pub fn with_room_mention() -> Self { Self { room: true, ..Default::default() } } + + fn add(&mut self, mentions: Self) { + self.user_ids.extend(mentions.user_ids); + self.room |= mentions.room; + } } // Wrapper around `Box` that cannot be used in a meaningful way outside of diff --git a/crates/ruma-events/src/room/message.rs b/crates/ruma-events/src/room/message.rs index 978312aa..c48f76f6 100644 --- a/crates/ruma-events/src/room/message.rs +++ b/crates/ruma-events/src/room/message.rs @@ -348,13 +348,7 @@ impl RoomMessageEventContent { /// /// [mentions]: https://spec.matrix.org/latest/client-server-api/#user-and-room-mentions pub fn add_mentions(mut self, mentions: Mentions) -> Self { - if let Some(m) = &mut self.mentions { - m.user_ids.extend(mentions.user_ids); - m.room |= mentions.room; - } else { - self.mentions = Some(mentions); - } - + self.mentions.get_or_insert_with(Mentions::new).add(mentions); self } diff --git a/crates/ruma-events/src/room/message/without_relation.rs b/crates/ruma-events/src/room/message/without_relation.rs index 82943231..7d734e65 100644 --- a/crates/ruma-events/src/room/message/without_relation.rs +++ b/crates/ruma-events/src/room/message/without_relation.rs @@ -213,6 +213,18 @@ impl RoomMessageEventContentWithoutRelation { self.make_reply_tweaks(original_event_id, original_thread_id, sender_for_mentions) } + /// Add the given [mentions] to this event. + /// + /// If no [`Mentions`] was set on this events, this sets it. Otherwise, this updates the current + /// mentions by extending the previous `user_ids` with the new ones, and applies a logical OR to + /// the values of `room`. + /// + /// [mentions]: https://spec.matrix.org/latest/client-server-api/#user-and-room-mentions + pub fn add_mentions(mut self, mentions: Mentions) -> Self { + self.mentions.get_or_insert_with(Mentions::new).add(mentions); + self + } + fn make_reply_tweaks( mut self, original_event_id: OwnedEventId,