From 537aa9b952bea16c7a0fbc9a28fb688e34ec7c1a Mon Sep 17 00:00:00 2001 From: Jazz Turner-Baggs <473256+jazzz@users.noreply.github.com> Date: Thu, 18 Jun 2026 13:11:50 -0700 Subject: [PATCH 1/2] Add Identified Trait for convo --- core/conversations/src/conversation.rs | 6 ++++-- core/conversations/src/conversation/group_v1.rs | 17 ++++++++--------- core/conversations/src/conversation/group_v2.rs | 11 +++++++---- .../conversations/src/conversation/privatev1.rs | 12 +++++++----- core/conversations/src/core.rs | 8 +++++--- core/conversations/src/inbox_v2.rs | 1 + 6 files changed, 32 insertions(+), 23 deletions(-) diff --git a/core/conversations/src/conversation.rs b/core/conversations/src/conversation.rs index c8816fa..ccb5fa1 100644 --- a/core/conversations/src/conversation.rs +++ b/core/conversations/src/conversation.rs @@ -15,7 +15,7 @@ pub type ConversationId = String; pub type ConversationIdRef<'a> = &'a str; /// Behaviour shared by every conversation kind. -pub(crate) trait Convo { +pub(crate) trait Convo: Identified { fn send_content(&mut self, cx: &mut ServiceContext, content: &[u8]) -> Result<(), ChatError>; @@ -40,6 +40,8 @@ pub(crate) trait GroupConvo: Convo + std::fmt::Debug + S cx: &mut ServiceContext, members: &[IdentIdRef], ) -> Result<(), ChatError>; +} - fn id(&self) -> ConversationIdRef<'_>; +pub(crate) trait Identified { + fn id(&self) -> ConversationIdRef; } diff --git a/core/conversations/src/conversation/group_v1.rs b/core/conversations/src/conversation/group_v1.rs index 0d0d433..ba59a9e 100644 --- a/core/conversations/src/conversation/group_v1.rs +++ b/core/conversations/src/conversation/group_v1.rs @@ -11,12 +11,13 @@ use prost::Message as _; use shared_traits::IdentIdRef; use crate::account_directory::{AccountDirectory, resolve_device_ids}; +use crate::conversation::ConversationIdRef; use crate::inbox_v2::MlsProvider; use crate::service_context::{ExternalServices, ServiceContext}; use crate::{ DeliveryService, IdentityProvider, - conversation::{ChatError, Convo, GroupConvo}, + conversation::{ChatError, Convo, GroupConvo, Identified}, outcomes::{Content, ConvoOutcome}, service_traits::KeyPackageProvider, types::AddressedEncryptedPayload, @@ -174,10 +175,6 @@ impl GroupV1Convo { Ok(keypackages) } - pub fn id(&self) -> &str { - &self.convo_id - } - fn send_message( &mut self, content: &[u8], @@ -205,6 +202,12 @@ impl GroupV1Convo { } } +impl Identified for GroupV1Convo { + fn id(&self) -> ConversationIdRef<'_> { + &self.convo_id + } +} + impl Convo for GroupV1Convo { fn send_content( &mut self, @@ -344,8 +347,4 @@ impl GroupConvo for GroupV1Convo { .publish(env) .map_err(|e| ChatError::Generic(format!("Publish: {e}"))) } - - fn id(&self) -> super::ConversationIdRef<'_> { - &self.convo_id - } } diff --git a/core/conversations/src/conversation/group_v2.rs b/core/conversations/src/conversation/group_v2.rs index c8a42cb..815cf10 100644 --- a/core/conversations/src/conversation/group_v2.rs +++ b/core/conversations/src/conversation/group_v2.rs @@ -31,7 +31,7 @@ use crate::IdentityProvider; use crate::conversation::{ConversationIdRef, ExternalServices, ServiceContext}; use crate::{ ConvoOutcome, DeliveryService, RegistrationService, - conversation::{ChatError, Convo, GroupConvo}, + conversation::{ChatError, Convo, GroupConvo, Identified}, }; /// Namespace used for de-mls (GroupV2) keypackages, so they don't collide @@ -272,6 +272,12 @@ impl GroupV2Convo { } } +impl Identified for GroupV2Convo { + fn id(&self) -> ConversationIdRef<'_> { + &self.convo_id + } +} + impl Convo for GroupV2Convo where S: ExternalServices, @@ -347,9 +353,6 @@ impl GroupConvo for GroupV2Convo where S: ExternalServices, { - fn id(&self) -> ConversationIdRef<'_> { - &self.convo_id - } #[instrument(name = "groupv2.add_member", skip_all, fields(user_id = %service_ctx.mls_identity.display_name()))] fn add_member( &mut self, diff --git a/core/conversations/src/conversation/privatev1.rs b/core/conversations/src/conversation/privatev1.rs index 8bb1a1e..a6e278c 100644 --- a/core/conversations/src/conversation/privatev1.rs +++ b/core/conversations/src/conversation/privatev1.rs @@ -14,7 +14,7 @@ use storage::{ConversationKind, ConversationMeta, ConversationStore}; use crate::{ DeliveryService, - conversation::{ChatError, ConversationId, Convo}, + conversation::{ChatError, ConversationId, ConversationIdRef, Convo, Identified}, errors::EncryptionError, inbox::PRIVATE_V1_INBOX_ADDRESS, outcomes::{Content, ConvoOutcome}, @@ -200,10 +200,6 @@ impl PrivateV1Convo { } } - pub fn id(&self) -> &str { - &self.local_convo_id - } - pub fn encrypt_content( &mut self, content: &[u8], @@ -235,6 +231,12 @@ impl PrivateV1Convo { } } +impl Identified for PrivateV1Convo { + fn id(&self) -> ConversationIdRef<'_> { + &self.local_convo_id + } +} + impl Convo for PrivateV1Convo { fn send_content( &mut self, diff --git a/core/conversations/src/core.rs b/core/conversations/src/core.rs index 0997afa..1bc5a88 100644 --- a/core/conversations/src/core.rs +++ b/core/conversations/src/core.rs @@ -1,5 +1,7 @@ use crate::causal_history::{CausalHistoryStore, MissingMessage}; -use crate::conversation::{ConversationIdRef, GroupV1Convo, GroupV2Convo, PrivateV1Convo}; +use crate::conversation::{ + ConversationIdRef, GroupV1Convo, GroupV2Convo, Identified, PrivateV1Convo, +}; use crate::service_context::{ExternalServices, ServiceContext}; use crate::{DeliveryService, IdentityProvider, RegistrationService, WakeupService}; use crate::{ @@ -470,8 +472,8 @@ enum ConvoTypeOwned { Group(Box>), } -impl<'a, S: ExternalServices> ConvoTypeOwned { - pub fn id(&'a self) -> ConversationIdRef<'a> { +impl Identified for ConvoTypeOwned { + fn id(&self) -> ConversationIdRef<'_> { match self { ConvoTypeOwned::Group(group_convo) => group_convo.id(), } diff --git a/core/conversations/src/inbox_v2.rs b/core/conversations/src/inbox_v2.rs index 23589ff..57f1463 100644 --- a/core/conversations/src/inbox_v2.rs +++ b/core/conversations/src/inbox_v2.rs @@ -21,6 +21,7 @@ use crate::RegistrationService; use crate::conversation::GroupConvo; use crate::conversation::GroupV1Convo; use crate::conversation::GroupV2Convo; +use crate::conversation::Identified as _; use crate::service_context::{ExternalServices, ServiceContext}; use crate::utils::{blake2b_hex, hash_size}; use crate::{ From e58af8ddd8e86d3a26a0b2f8563abae720a4706f Mon Sep 17 00:00:00 2001 From: Jazz Turner-Baggs <473256+jazzz@users.noreply.github.com> Date: Thu, 18 Jun 2026 14:19:38 -0700 Subject: [PATCH 2/2] Clippy fix --- core/conversations/src/conversation.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/conversations/src/conversation.rs b/core/conversations/src/conversation.rs index ccb5fa1..c9377c4 100644 --- a/core/conversations/src/conversation.rs +++ b/core/conversations/src/conversation.rs @@ -43,5 +43,5 @@ pub(crate) trait GroupConvo: Convo + std::fmt::Debug + S } pub(crate) trait Identified { - fn id(&self) -> ConversationIdRef; + fn id(&self) -> ConversationIdRef<'_>; }