From 1db716f643d13fa259c63fa2d91507c2c2a66c75 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Wed, 13 Apr 2022 16:45:15 +0200 Subject: [PATCH] events: Add transaction_id accessor to applicable event enums --- crates/ruma-common/src/events/enums.rs | 19 ++++++++++++++++++- crates/ruma-macros/src/events/event_enum.rs | 20 ++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/crates/ruma-common/src/events/enums.rs b/crates/ruma-common/src/events/enums.rs index 6e850ad5..a1997caf 100644 --- a/crates/ruma-common/src/events/enums.rs +++ b/crates/ruma-common/src/events/enums.rs @@ -8,7 +8,8 @@ use super::{ Redact, }; use crate::{ - serde::from_raw_json_value, EventId, MilliSecondsSinceUnixEpoch, RoomId, RoomVersionId, UserId, + serde::from_raw_json_value, EventId, MilliSecondsSinceUnixEpoch, RoomId, RoomVersionId, + TransactionId, UserId, }; event_enum! { @@ -153,6 +154,14 @@ impl AnyRoomEvent { room_ev_accessor!(room_id: &RoomId); room_ev_accessor!(event_id: &EventId); room_ev_accessor!(sender: &UserId); + + /// Returns this event's `transaction_id` from inside `unsigned`, if there is one. + pub fn transaction_id(&self) -> Option<&TransactionId> { + match self { + Self::MessageLike(ev) => ev.transaction_id(), + Self::State(ev) => ev.transaction_id(), + } + } } /// Any sync room event. @@ -173,6 +182,14 @@ impl AnySyncRoomEvent { room_ev_accessor!(event_id: &EventId); room_ev_accessor!(sender: &UserId); + /// Returns this event's `transaction_id` from inside `unsigned`, if there is one. + pub fn transaction_id(&self) -> Option<&TransactionId> { + match self { + Self::MessageLike(ev) => ev.transaction_id(), + Self::State(ev) => ev.transaction_id(), + } + } + /// Converts `self` to an `AnyRoomEvent` by adding the given a room ID. pub fn into_full_event(self, room_id: Box) -> AnyRoomEvent { match self { diff --git a/crates/ruma-macros/src/events/event_enum.rs b/crates/ruma-macros/src/events/event_enum.rs index 6599ade7..ac6e1f0c 100644 --- a/crates/ruma-macros/src/events/event_enum.rs +++ b/crates/ruma-macros/src/events/event_enum.rs @@ -487,6 +487,25 @@ fn expand_accessor_methods( }) }); + let txn_id_accessor = maybe_redacted.then(|| { + let variants = variants.iter().map(|v| v.match_arm(quote! { Self })); + quote! { + /// Returns this event's `transaction_id` from inside `unsigned`, if there is one. + pub fn transaction_id(&self) -> Option<&#ruma_common::TransactionId> { + match self { + #( + #variants(event) => { + event.as_original().and_then(|ev| ev.unsigned.transaction_id.as_deref()) + } + )* + Self::_Custom(event) => { + event.as_original().and_then(|ev| ev.unsigned.transaction_id.as_deref()) + } + } + } + } + }); + Ok(quote! { #[automatically_derived] impl #ident { @@ -497,6 +516,7 @@ fn expand_accessor_methods( #content_accessors #( #methods )* + #txn_id_accessor } }) }