8484 K :: Target : KVStore ,
8585 L :: Target : Logger ,
8686{
87- pub ( crate ) fn new ( kv_store : K , logger : L ) -> Self {
88- let payments = Mutex :: new ( HashMap :: new ( ) ) ;
89- Self { payments, kv_store, logger }
90- }
91-
92- pub ( crate ) fn from_payments ( payments : Vec < PaymentDetails > , kv_store : K , logger : L ) -> Self {
87+ pub ( crate ) fn new ( payments : Vec < PaymentDetails > , kv_store : K , logger : L ) -> Self {
9388 let payments = Mutex :: new ( HashMap :: from_iter (
9489 payments. into_iter ( ) . map ( |payment| ( payment. hash , payment) ) ,
9590 ) ) ;
@@ -105,7 +100,7 @@ where
105100 Ok ( updated)
106101 }
107102
108- pub ( crate ) fn remove ( & self , hash : & PaymentHash ) -> Result < ( ) , Error > {
103+ pub ( crate ) fn remove ( & self , hash : & PaymentHash ) -> Result < bool , Error > {
109104 let store_key = hex_utils:: to_string ( & hash. 0 ) ;
110105 self . kv_store . remove ( PAYMENT_INFO_PERSISTENCE_NAMESPACE , & store_key) . map_err ( |e| {
111106 log_error ! (
@@ -116,8 +111,7 @@ where
116111 e
117112 ) ;
118113 Error :: PersistenceFailed
119- } ) ?;
120- Ok ( ( ) )
114+ } )
121115 }
122116
123117 pub ( crate ) fn get ( & self , hash : & PaymentHash ) -> Option < PaymentDetails > {
@@ -160,6 +154,19 @@ where
160154 Ok ( updated)
161155 }
162156
157+ pub ( crate ) fn list_filter < F : FnMut ( & & PaymentDetails ) -> bool > (
158+ & self , f : F ,
159+ ) -> Vec < PaymentDetails > {
160+ self . payments
161+ . lock ( )
162+ . unwrap ( )
163+ . iter ( )
164+ . map ( |( _, p) | p)
165+ . filter ( f)
166+ . cloned ( )
167+ . collect :: < Vec < PaymentDetails > > ( )
168+ }
169+
163170 fn write_info_and_commit (
164171 & self , hash : & PaymentHash , payment : & PaymentDetails ,
165172 ) -> Result < ( ) , Error > {
@@ -209,7 +216,7 @@ mod tests {
209216 fn persistence_guard_persists_on_drop ( ) {
210217 let store = Arc :: new ( TestStore :: new ( ) ) ;
211218 let logger = Arc :: new ( TestLogger :: new ( ) ) ;
212- let payment_store = PaymentStore :: new ( Arc :: clone ( & store) , logger) ;
219+ let payment_store = PaymentStore :: new ( Vec :: new ( ) , Arc :: clone ( & store) , logger) ;
213220
214221 let hash = PaymentHash ( [ 42u8 ; 32 ] ) ;
215222 assert ! ( !payment_store. contains( & hash) ) ;
0 commit comments