@@ -590,6 +590,13 @@ impl From<&PaymentDetails> for PaymentDetailsUpdate {
590
590
}
591
591
}
592
592
593
+ #[ derive( PartialEq , Eq , Debug , Clone , Copy ) ]
594
+ pub ( crate ) enum PaymentStoreUpdateResult {
595
+ Updated ,
596
+ Unchanged ,
597
+ NotFound ,
598
+ }
599
+
593
600
pub ( crate ) struct PaymentStore < L : Deref >
594
601
where
595
602
L :: Target : LdkLogger ,
@@ -670,17 +677,22 @@ where
670
677
self . payments . lock ( ) . unwrap ( ) . get ( id) . cloned ( )
671
678
}
672
679
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 > {
675
683
let mut locked_payments = self . payments . lock ( ) . unwrap ( ) ;
676
684
677
685
if let Some ( payment) = locked_payments. get_mut ( & update. id ) {
678
- updated = payment. update ( update) ;
686
+ let updated = payment. update ( update) ;
679
687
if updated {
680
688
self . persist_info ( & update. id , payment) ?;
689
+ Ok ( PaymentStoreUpdateResult :: Updated )
690
+ } else {
691
+ Ok ( PaymentStoreUpdateResult :: Unchanged )
681
692
}
693
+ } else {
694
+ Ok ( PaymentStoreUpdateResult :: NotFound )
682
695
}
683
- Ok ( updated)
684
696
}
685
697
686
698
pub ( crate ) fn list_filter < F : FnMut ( & & PaymentDetails ) -> bool > (
@@ -789,9 +801,22 @@ mod tests {
789
801
assert_eq ! ( Ok ( true ) , payment_store. insert( payment) ) ;
790
802
assert ! ( payment_store. get( & id) . is_some( ) ) ;
791
803
804
+ // Check update returns `Updated`
792
805
let mut update = PaymentDetailsUpdate :: new ( id) ;
793
806
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
+
795
820
assert ! ( payment_store. get( & id) . is_some( ) ) ;
796
821
797
822
assert_eq ! ( PaymentStatus :: Succeeded , payment_store. get( & id) . unwrap( ) . status) ;
0 commit comments