@@ -590,6 +590,13 @@ impl From<&PaymentDetails> for PaymentDetailsUpdate {
590590 }
591591}
592592
593+ #[ derive( PartialEq , Eq , Debug , Clone , Copy ) ]
594+ pub ( crate ) enum PaymentStoreUpdateResult {
595+ Updated ,
596+ Unchanged ,
597+ NotFound ,
598+ }
599+
593600pub ( crate ) struct PaymentStore < L : Deref >
594601where
595602 L :: Target : LdkLogger ,
@@ -670,17 +677,22 @@ where
670677 self . payments . lock ( ) . unwrap ( ) . get ( id) . cloned ( )
671678 }
672679
673- pub ( crate ) fn update ( & self , update : & PaymentDetailsUpdate ) -> Result < bool , Error > {
674- let mut updated = false ;
680+ pub ( crate ) fn update (
681+ & self , update : & PaymentDetailsUpdate ,
682+ ) -> Result < PaymentStoreUpdateResult , Error > {
675683 let mut locked_payments = self . payments . lock ( ) . unwrap ( ) ;
676684
677685 if let Some ( payment) = locked_payments. get_mut ( & update. id ) {
678- updated = payment. update ( update) ;
686+ let updated = payment. update ( update) ;
679687 if updated {
680688 self . persist_info ( & update. id , payment) ?;
689+ Ok ( PaymentStoreUpdateResult :: Updated )
690+ } else {
691+ Ok ( PaymentStoreUpdateResult :: Unchanged )
681692 }
693+ } else {
694+ Ok ( PaymentStoreUpdateResult :: NotFound )
682695 }
683- Ok ( updated)
684696 }
685697
686698 pub ( crate ) fn list_filter < F : FnMut ( & & PaymentDetails ) -> bool > (
@@ -789,9 +801,22 @@ mod tests {
789801 assert_eq ! ( Ok ( true ) , payment_store. insert( payment) ) ;
790802 assert ! ( payment_store. get( & id) . is_some( ) ) ;
791803
804+ // Check update returns `Updated`
792805 let mut update = PaymentDetailsUpdate :: new ( id) ;
793806 update. status = Some ( PaymentStatus :: Succeeded ) ;
794- assert_eq ! ( Ok ( true ) , payment_store. update( & update) ) ;
807+ assert_eq ! ( Ok ( PaymentStoreUpdateResult :: Updated ) , payment_store. update( & update) ) ;
808+
809+ // Check no-op update yields `Unchanged`
810+ let mut update = PaymentDetailsUpdate :: new ( id) ;
811+ update. status = Some ( PaymentStatus :: Succeeded ) ;
812+ assert_eq ! ( Ok ( PaymentStoreUpdateResult :: Unchanged ) , payment_store. update( & update) ) ;
813+
814+ // Check bogus update yields `NotFound`
815+ let bogus_id = PaymentId ( [ 84u8 ; 32 ] ) ;
816+ let mut update = PaymentDetailsUpdate :: new ( bogus_id) ;
817+ update. status = Some ( PaymentStatus :: Succeeded ) ;
818+ assert_eq ! ( Ok ( PaymentStoreUpdateResult :: NotFound ) , payment_store. update( & update) ) ;
819+
795820 assert ! ( payment_store. get( & id) . is_some( ) ) ;
796821
797822 assert_eq ! ( PaymentStatus :: Succeeded , payment_store. get( & id) . unwrap( ) . status) ;
0 commit comments