@@ -88,13 +88,15 @@ where
8888 fn create_message_for_event (
8989 & self ,
9090 group : & mut MlsGroup ,
91- mut rumor : UnsignedEvent ,
91+ rumor : & mut UnsignedEvent ,
9292 ) -> Result < Vec < u8 > , Error > {
9393 // Load signer
9494 let signer: SignatureKeyPair = self . load_mls_signer ( group) ?;
9595
96- // Ensure rumor ID and serialize as JSON
96+ // Ensure rumor ID
9797 rumor. ensure_id ( ) ;
98+
99+ // Serialize as JSON
98100 let json: String = rumor. as_json ( ) ;
99101
100102 // Create message
@@ -126,7 +128,7 @@ where
126128 pub fn create_message (
127129 & self ,
128130 mls_group_id : & GroupId ,
129- rumor : UnsignedEvent ,
131+ mut rumor : UnsignedEvent ,
130132 ) -> Result < Event , Error > {
131133 // Load mls group
132134 let mut mls_group = self
@@ -140,7 +142,10 @@ where
140142 . ok_or ( Error :: GroupNotFound ) ?;
141143
142144 // Create message
143- let message: Vec < u8 > = self . create_message_for_event ( & mut mls_group, rumor. clone ( ) ) ?;
145+ let message: Vec < u8 > = self . create_message_for_event ( & mut mls_group, & mut rumor) ?;
146+
147+ // Get the rumor ID
148+ let rumor_id: EventId = rumor. id ( ) ;
144149
145150 // Export secret
146151 let secret: group_types:: GroupExporterSecret = self . exporter_secret ( mls_group_id) ?;
@@ -167,7 +172,7 @@ where
167172
168173 // Create message to save to storage
169174 let message: message_types:: Message = message_types:: Message {
170- id : rumor . id . unwrap ( ) ,
175+ id : rumor_id ,
171176 pubkey : rumor. pubkey ,
172177 kind : rumor. kind ,
173178 mls_group_id : mls_group_id. clone ( ) ,
@@ -182,7 +187,7 @@ where
182187 // Create processed_message to track state of message
183188 let processed_message: message_types:: ProcessedMessage = message_types:: ProcessedMessage {
184189 wrapper_event_id : event. id ,
185- message_event_id : Some ( rumor . id . unwrap ( ) ) ,
190+ message_event_id : Some ( rumor_id ) ,
186191 processed_at : Timestamp :: now ( ) ,
187192 state : message_types:: ProcessedMessageState :: Created ,
188193 failure_reason : None ,
@@ -360,17 +365,19 @@ where
360365 // The resulting serialized message is the MLS encrypted message that Bob sent
361366 // Now Bob can process the MLS message content and do what's needed with it
362367 match self . process_message_for_group ( & mut mls_group, & message_bytes) {
363- Ok ( Some ( rumor) ) => {
368+ Ok ( Some ( mut rumor) ) => {
369+ let rumor_id: EventId = rumor. id ( ) ;
370+
364371 let processed_message = message_types:: ProcessedMessage {
365372 wrapper_event_id : event. id ,
366- message_event_id : Some ( rumor . id . unwrap ( ) ) ,
373+ message_event_id : Some ( rumor_id ) ,
367374 processed_at : Timestamp :: now ( ) ,
368375 state : message_types:: ProcessedMessageState :: Processed ,
369376 failure_reason : None ,
370377 } ;
371378
372379 let message = message_types:: Message {
373- id : rumor . id . unwrap ( ) ,
380+ id : rumor_id ,
374381 pubkey : rumor. pubkey ,
375382 kind : rumor. kind ,
376383 mls_group_id : group. mls_group_id . clone ( ) ,
@@ -421,18 +428,23 @@ where
421428 match e {
422429 Error :: CannotDecryptOwnMessage => {
423430 tracing:: debug!( target: "nostr_mls::messages::process_message" , "Cannot decrypt own message, checking for cached message" ) ;
431+
424432 let mut processed_message = self
425433 . storage ( )
426434 . find_processed_message_by_event_id ( & event. id )
427435 . map_err ( |e| Error :: Message ( e. to_string ( ) ) ) ?
428436 . ok_or ( Error :: Message ( "Processed message not found" . to_string ( ) ) ) ?;
429437
438+ let message_event_id: EventId = processed_message
439+ . message_event_id
440+ . ok_or ( Error :: Message ( "Message event ID not found" . to_string ( ) ) ) ?;
441+
430442 // If the message is created, we need to update the state of the message and processed message
431443 // If it's already processed, we don't need to do anything
432444 match processed_message. state {
433445 message_types:: ProcessedMessageState :: Created => {
434446 let mut message = self
435- . get_message ( & processed_message . message_event_id . unwrap ( ) ) ?
447+ . get_message ( & message_event_id) ?
436448 . ok_or ( Error :: Message ( "Message not found" . to_string ( ) ) ) ?;
437449
438450 message. state = message_types:: MessageState :: Processed ;
@@ -455,8 +467,7 @@ where
455467 tracing:: debug!( target: "nostr_mls::messages::process_message" , "Message previously failed to process" ) ;
456468 }
457469 }
458- let message =
459- self . get_message ( & processed_message. message_event_id . unwrap ( ) ) ?;
470+ let message = self . get_message ( & message_event_id) ?;
460471 return Ok ( message) ;
461472 }
462473 _ => {
0 commit comments