@@ -94,24 +94,31 @@ pub trait ALiquidityManager {
9494 type Filter : Filter + ?Sized ;
9595 /// A type that may be dereferenced to [`Self::Filter`].
9696 type C : Deref < Target = Self :: Filter > + Clone ;
97+ /// A type implementing [`TimeProvider`].
98+ type TimeProvider : TimeProvider + ?Sized ;
99+ /// A type that may be dereferenced to [`Self::TimeProvider`].
100+ type TP : Deref < Target = Self :: TimeProvider > + Clone ;
97101 /// Returns a reference to the actual [`LiquidityManager`] object.
98- fn get_lm ( & self ) -> & LiquidityManager < Self :: ES , Self :: CM , Self :: C > ;
102+ fn get_lm ( & self ) -> & LiquidityManager < Self :: ES , Self :: CM , Self :: C , Self :: TP > ;
99103}
100104
101- impl < ES : Deref + Clone , CM : Deref + Clone , C : Deref + Clone > ALiquidityManager
102- for LiquidityManager < ES , CM , C >
105+ impl < ES : Deref + Clone , CM : Deref + Clone , C : Deref + Clone , TP : Deref + Clone > ALiquidityManager
106+ for LiquidityManager < ES , CM , C , TP >
103107where
104108 ES :: Target : EntropySource ,
105109 CM :: Target : AChannelManager ,
106110 C :: Target : Filter ,
111+ TP :: Target : TimeProvider ,
107112{
108113 type EntropySource = ES :: Target ;
109114 type ES = ES ;
110115 type AChannelManager = CM :: Target ;
111116 type CM = CM ;
112117 type Filter = C :: Target ;
113118 type C = C ;
114- fn get_lm ( & self ) -> & LiquidityManager < ES , CM , C > {
119+ type TimeProvider = TP :: Target ;
120+ type TP = TP ;
121+ fn get_lm ( & self ) -> & LiquidityManager < ES , CM , C , TP > {
115122 self
116123 }
117124}
@@ -135,11 +142,16 @@ where
135142/// [`Event::ChannelReady`]: lightning::events::Event::ChannelReady
136143/// [`Event::HTLCHandlingFailed`]: lightning::events::Event::HTLCHandlingFailed
137144/// [`Event::PaymentForwarded`]: lightning::events::Event::PaymentForwarded
138- pub struct LiquidityManager < ES : Deref + Clone , CM : Deref + Clone , C : Deref + Clone >
139- where
145+ pub struct LiquidityManager <
146+ ES : Deref + Clone ,
147+ CM : Deref + Clone ,
148+ C : Deref + Clone ,
149+ TP : Deref + Clone ,
150+ > where
140151 ES :: Target : EntropySource ,
141152 CM :: Target : AChannelManager ,
142153 C :: Target : Filter ,
154+ TP :: Target : TimeProvider ,
143155{
144156 pending_messages : Arc < MessageQueue > ,
145157 pending_events : Arc < EventQueue > ,
@@ -153,25 +165,23 @@ where
153165 lsps1_client_handler : Option < LSPS1ClientHandler < ES > > ,
154166 lsps2_service_handler : Option < LSPS2ServiceHandler < CM > > ,
155167 lsps2_client_handler : Option < LSPS2ClientHandler < ES > > ,
156- lsps5_service_handler : Option < LSPS5ServiceHandler < CM > > ,
157- lsps5_client_handler : Option < LSPS5ClientHandler < ES > > ,
168+ lsps5_service_handler : Option < LSPS5ServiceHandler < CM , TP > > ,
169+ lsps5_client_handler : Option < LSPS5ClientHandler < ES , TP > > ,
158170 service_config : Option < LiquidityServiceConfig > ,
159171 _client_config : Option < LiquidityClientConfig > ,
160172 best_block : RwLock < Option < BestBlock > > ,
161173 _chain_source : Option < C > ,
162174}
163175
164- impl < ES : Deref + Clone , CM : Deref + Clone , C : Deref + Clone > LiquidityManager < ES , CM , C >
176+ #[ cfg( feature = "time" ) ]
177+ impl < ES : Deref + Clone , CM : Deref + Clone , C : Deref + Clone >
178+ LiquidityManager < ES , CM , C , Arc < DefaultTimeProvider > >
165179where
166180 ES :: Target : EntropySource ,
167181 CM :: Target : AChannelManager ,
168182 C :: Target : Filter ,
169183{
170- /// Constructor for the [`LiquidityManager`].
171- ///
172- /// Sets up the required protocol message handlers based on the given
173- /// [`LiquidityClientConfig`] and [`LiquidityServiceConfig`].
174- #[ cfg( feature = "time" ) ]
184+ /// Constructor for the [`LiquidityManager`] using the default system clock
175185 pub fn new (
176186 entropy_source : ES , channel_manager : CM , chain_source : Option < C > ,
177187 chain_params : Option < ChainParameters > , service_config : Option < LiquidityServiceConfig > ,
@@ -188,7 +198,16 @@ where
188198 time_provider,
189199 )
190200 }
201+ }
191202
203+ impl < ES : Deref + Clone , CM : Deref + Clone , C : Deref + Clone , TP : Deref + Clone >
204+ LiquidityManager < ES , CM , C , TP >
205+ where
206+ ES :: Target : EntropySource ,
207+ CM :: Target : AChannelManager ,
208+ C :: Target : Filter ,
209+ TP :: Target : TimeProvider ,
210+ {
192211 /// Constructor for the [`LiquidityManager`] with a custom time provider.
193212 ///
194213 /// This should be used on non-std platforms where access to the system time is not
@@ -198,9 +217,8 @@ where
198217 pub fn new_with_custom_time_provider (
199218 entropy_source : ES , channel_manager : CM , chain_source : Option < C > ,
200219 chain_params : Option < ChainParameters > , service_config : Option < LiquidityServiceConfig > ,
201- client_config : Option < LiquidityClientConfig > , time_provider : Arc < dyn TimeProvider > ,
202- ) -> Self
203- where {
220+ client_config : Option < LiquidityClientConfig > , time_provider : TP ,
221+ ) -> Self {
204222 let pending_messages = Arc :: new ( MessageQueue :: new ( ) ) ;
205223 let pending_events = Arc :: new ( EventQueue :: new ( ) ) ;
206224 let ignored_peers = RwLock :: new ( new_hash_set ( ) ) ;
@@ -248,7 +266,7 @@ where {
248266 let lsps5_service_handler = service_config. as_ref ( ) . and_then ( |config| {
249267 config. lsps5_service_config . as_ref ( ) . map ( |config| {
250268 if let Some ( number) =
251- <LSPS5ServiceHandler < CM > as LSPSProtocolMessageHandler >:: PROTOCOL_NUMBER
269+ <LSPS5ServiceHandler < CM , TP > as LSPSProtocolMessageHandler >:: PROTOCOL_NUMBER
252270 {
253271 supported_protocols. push ( number) ;
254272 }
@@ -369,14 +387,14 @@ where {
369387 /// Returns a reference to the LSPS5 client-side handler.
370388 ///
371389 /// The returned hendler allows to initiate the LSPS5 client-side flow. That is, it allows to
372- pub fn lsps5_client_handler ( & self ) -> Option < & LSPS5ClientHandler < ES > > {
390+ pub fn lsps5_client_handler ( & self ) -> Option < & LSPS5ClientHandler < ES , TP > > {
373391 self . lsps5_client_handler . as_ref ( )
374392 }
375393
376394 /// Returns a reference to the LSPS5 server-side handler.
377395 ///
378396 /// The returned hendler allows to initiate the LSPS5 service-side flow.
379- pub fn lsps5_service_handler ( & self ) -> Option < & LSPS5ServiceHandler < CM > > {
397+ pub fn lsps5_service_handler ( & self ) -> Option < & LSPS5ServiceHandler < CM , TP > > {
380398 self . lsps5_service_handler . as_ref ( )
381399 }
382400
@@ -530,12 +548,13 @@ where {
530548 }
531549}
532550
533- impl < ES : Deref + Clone + Clone , CM : Deref + Clone , C : Deref + Clone > CustomMessageReader
534- for LiquidityManager < ES , CM , C >
551+ impl < ES : Deref + Clone , CM : Deref + Clone , C : Deref + Clone , TP : Deref + Clone > CustomMessageReader
552+ for LiquidityManager < ES , CM , C , TP >
535553where
536554 ES :: Target : EntropySource ,
537555 CM :: Target : AChannelManager ,
538556 C :: Target : Filter ,
557+ TP :: Target : TimeProvider ,
539558{
540559 type CustomMessage = RawLSPSMessage ;
541560
@@ -551,12 +570,13 @@ where
551570 }
552571}
553572
554- impl < ES : Deref + Clone , CM : Deref + Clone , C : Deref + Clone > CustomMessageHandler
555- for LiquidityManager < ES , CM , C >
573+ impl < ES : Deref + Clone , CM : Deref + Clone , C : Deref + Clone , TP : Deref + Clone > CustomMessageHandler
574+ for LiquidityManager < ES , CM , C , TP >
556575where
557576 ES :: Target : EntropySource ,
558577 CM :: Target : AChannelManager ,
559578 C :: Target : Filter ,
579+ TP :: Target : TimeProvider ,
560580{
561581 fn handle_custom_message (
562582 & self , msg : Self :: CustomMessage , sender_node_id : PublicKey ,
@@ -663,11 +683,13 @@ where
663683 }
664684}
665685
666- impl < ES : Deref + Clone , CM : Deref + Clone , C : Deref + Clone > Listen for LiquidityManager < ES , CM , C >
686+ impl < ES : Deref + Clone , CM : Deref + Clone , C : Deref + Clone , TP : Deref + Clone > Listen
687+ for LiquidityManager < ES , CM , C , TP >
667688where
668689 ES :: Target : EntropySource ,
669690 CM :: Target : AChannelManager ,
670691 C :: Target : Filter ,
692+ TP :: Target : TimeProvider ,
671693{
672694 fn filtered_block_connected (
673695 & self , header : & bitcoin:: block:: Header , txdata : & chain:: transaction:: TransactionData ,
@@ -700,11 +722,13 @@ where
700722 }
701723}
702724
703- impl < ES : Deref + Clone , CM : Deref + Clone , C : Deref + Clone > Confirm for LiquidityManager < ES , CM , C >
725+ impl < ES : Deref + Clone , CM : Deref + Clone , C : Deref + Clone , TP : Deref + Clone > Confirm
726+ for LiquidityManager < ES , CM , C , TP >
704727where
705728 ES :: Target : EntropySource ,
706729 CM :: Target : AChannelManager ,
707730 C :: Target : Filter ,
731+ TP :: Target : TimeProvider ,
708732{
709733 fn transactions_confirmed (
710734 & self , _header : & bitcoin:: block:: Header , _txdata : & chain:: transaction:: TransactionData ,
0 commit comments