@@ -27,15 +27,16 @@ use crate::util::chacha20::ChaCha20;
2727
2828use crate :: io;
2929use crate :: prelude:: * ;
30- use crate :: sync:: { Mutex , MutexGuard } ;
30+ use crate :: sync:: { Mutex } ;
3131use alloc:: collections:: BinaryHeap ;
3232use core:: { cmp, fmt} ;
33- use core:: ops:: Deref ;
33+ use core:: ops:: { Deref , DerefMut } ;
3434
3535/// A [`Router`] implemented using [`find_route`].
36- pub struct DefaultRouter < G : Deref < Target = NetworkGraph < L > > , L : Deref , S : Deref , SP : Sized , Sc : Score < ScoreParams = SP > > where
36+ pub struct DefaultRouter < G : Deref < Target = NetworkGraph < L > > , L : Deref , D : Sized , S : Deref , SP : Sized , Sc : Score < ScoreParams = SP > > where
3737 L :: Target : Logger ,
38- S :: Target : for < ' a > LockableScore < ' a , Locked = MutexGuard < ' a , Sc > > ,
38+ for < ' a > D : ' a + DerefMut < Target = Sc > ,
39+ S :: Target : for < ' a > LockableScore < ' a , Locked = D > ,
3940{
4041 network_graph : G ,
4142 logger : L ,
@@ -44,9 +45,10 @@ pub struct DefaultRouter<G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref,
4445 score_params : SP
4546}
4647
47- impl < G : Deref < Target = NetworkGraph < L > > , L : Deref , S : Deref , SP : Sized , Sc : Score < ScoreParams = SP > > DefaultRouter < G , L , S , SP , Sc > where
48+ impl < G : Deref < Target = NetworkGraph < L > > , L : Deref , S : Deref , D : Sized , SP : Sized , Sc : Score < ScoreParams = SP > > DefaultRouter < G , L , D , S , SP , Sc > where
4849 L :: Target : Logger ,
49- S :: Target : for < ' a > LockableScore < ' a , Locked = MutexGuard < ' a , Sc > > ,
50+ S :: Target : for < ' a > LockableScore < ' a , Locked = D > ,
51+ for < ' a > D : ' a + DerefMut < Target = Sc > ,
5052{
5153 /// Creates a new router.
5254 pub fn new ( network_graph : G , logger : L , random_seed_bytes : [ u8 ; 32 ] , scorer : S , score_params : SP ) -> Self {
@@ -55,9 +57,10 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref, SP: Sized, Sc: Scor
5557 }
5658}
5759
58- impl < G : Deref < Target = NetworkGraph < L > > , L : Deref , S : Deref , SP : Sized , Sc : Score < ScoreParams = SP > > Router for DefaultRouter < G , L , S , SP , Sc > where
60+ impl < G : Deref < Target = NetworkGraph < L > > , L : Deref , D : Sized , S : Deref , SP : Sized , Sc : Score < ScoreParams = SP > > Router for DefaultRouter < G , L , D , S , SP , Sc > where
5961 L :: Target : Logger ,
60- S :: Target : for < ' a > LockableScore < ' a , Locked = MutexGuard < ' a , Sc > > ,
62+ S :: Target : for < ' a > LockableScore < ' a , Locked = D > ,
63+ for < ' a > D : ' a + DerefMut < Target = Sc > ,
6164{
6265 fn find_route (
6366 & self ,
@@ -73,7 +76,7 @@ impl< G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref, SP: Sized, Sc: Sc
7376 } ;
7477 find_route (
7578 payer, params, & self . network_graph , first_hops, & * self . logger ,
76- & ScorerAccountingForInFlightHtlcs :: new ( self . scorer . lock ( ) , inflight_htlcs) ,
79+ & ScorerAccountingForInFlightHtlcs :: new ( self . scorer . lock ( ) . deref_mut ( ) , inflight_htlcs) ,
7780 & self . score_params ,
7881 & random_seed_bytes
7982 )
@@ -104,15 +107,15 @@ pub trait Router {
104107/// [`find_route`].
105108///
106109/// [`Score`]: crate::routing::scoring::Score
107- pub struct ScorerAccountingForInFlightHtlcs < ' a , S : Score > {
108- scorer : S ,
110+ pub struct ScorerAccountingForInFlightHtlcs < ' a , S : Score < ScoreParams = SP > , SP : Sized > {
111+ scorer : & ' a mut S ,
109112 // Maps a channel's short channel id and its direction to the liquidity used up.
110113 inflight_htlcs : & ' a InFlightHtlcs ,
111114}
112115
113- impl < ' a , S : Score > ScorerAccountingForInFlightHtlcs < ' a , S > {
116+ impl < ' a , S : Score < ScoreParams = SP > , SP : Sized > ScorerAccountingForInFlightHtlcs < ' a , S , SP > {
114117 /// Initialize a new `ScorerAccountingForInFlightHtlcs`.
115- pub fn new ( scorer : S , inflight_htlcs : & ' a InFlightHtlcs ) -> Self {
118+ pub fn new ( scorer : & ' a mut S , inflight_htlcs : & ' a InFlightHtlcs ) -> Self {
116119 ScorerAccountingForInFlightHtlcs {
117120 scorer,
118121 inflight_htlcs
@@ -125,7 +128,7 @@ impl<'a, S: Score> Writeable for ScorerAccountingForInFlightHtlcs<'a, S> {
125128 fn write < W : Writer > ( & self , writer : & mut W ) -> Result < ( ) , io:: Error > { self . scorer . write ( writer) }
126129}
127130
128- impl < ' a , S : Score > Score for ScorerAccountingForInFlightHtlcs < ' a , S > {
131+ impl < ' a , S : Score < ScoreParams = SP > , SP : Sized > Score for ScorerAccountingForInFlightHtlcs < ' a , S , SP > {
129132 type ScoreParams = S :: ScoreParams ;
130133 fn channel_penalty_msat ( & self , short_channel_id : u64 , source : & NodeId , target : & NodeId , usage : ChannelUsage , score_params : & Self :: ScoreParams ) -> u64 {
131134 if let Some ( used_liquidity) = self . inflight_htlcs . used_liquidity_msat (
0 commit comments