From 02dae0652d860bb25ce2887262bef8ab1806a20e Mon Sep 17 00:00:00 2001 From: Jazz Turner-Baggs <473256+jazzz@users.noreply.github.com> Date: Fri, 6 Feb 2026 08:25:17 -0800 Subject: [PATCH] Cleanup handler for easier understanding --- conversations/src/context.rs | 39 +++++++++++++++++++++---------- conversations/src/conversation.rs | 4 ++++ 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/conversations/src/context.rs b/conversations/src/context.rs index 8f6f7c2..342e9d2 100644 --- a/conversations/src/context.rs +++ b/conversations/src/context.rs @@ -88,21 +88,36 @@ impl Context { let convo_id = env.conversation_hint; let enc = EncryptedPayload::decode(payload)?; - // Call handle_payload on the appropriate protocol. - if convo_id == self.inbox.id() { - let (convo, content) = self.inbox.handle_frame(enc)?; - self.add_convo(convo); - - Ok(content) - } else { - let Some(convo) = self.store.get_mut(&convo_id) else { - return Err(ChatError::NoConvo(0)); // TODO: Remove ConvoHandle type - }; - - convo.handle_frame(enc) + match convo_id { + c if c == self.inbox.id() => self.dispatch_to_inbox(enc), + c if self.store.has(&c) => self.dispatch_to_convo(&c, enc), + _ => Err(ChatError::NoConvo(0)), // TODO: Remove ConvoHandle type } } + // Dispatch encrypted payload to Inbox, and register the created Conversation + fn dispatch_to_inbox( + &mut self, + enc_payload: EncryptedPayload, + ) -> Result, ChatError> { + let (convo, content) = self.inbox.handle_frame(enc_payload)?; + self.add_convo(convo); + Ok(content) + } + + // Dispatch encrypted payload to its corresponding conversation + fn dispatch_to_convo( + &mut self, + convo_id: ConversationId, + enc_payload: EncryptedPayload, + ) -> Result, ChatError> { + let Some(convo) = self.store.get_mut(&convo_id) else { + return Err(ChatError::Protocol("convo id not found".into())); + }; + + convo.handle_frame(enc_payload) + } + pub fn create_intro_bundle(&mut self) -> Result, ChatError> { let pkb = self.inbox.create_bundle(); Ok(Introduction::from(pkb).into()) diff --git a/conversations/src/conversation.rs b/conversations/src/conversation.rs index eeec398..8fd474f 100644 --- a/conversations/src/conversation.rs +++ b/conversations/src/conversation.rs @@ -46,6 +46,10 @@ impl ConversationStore { key } + pub fn has(&self, id: ConversationId) -> bool { + self.conversations.contains_key(id) + } + pub fn get(&self, id: ConversationId) -> Option<&(dyn Convo + '_)> { self.conversations.get(id).map(|c| c.as_ref()) }