@@ -470,6 +470,34 @@ where L::Target: Logger {
470
470
}
471
471
}
472
472
473
+
474
+ /// Pickhardt [`Router`] implemented using an alterhative [`find_route`] implementation that computes min cost flow.
475
+ pub struct PickhardtRouter < G : Deref < Target = NetworkGraph < L > > , L : Deref > where L :: Target : Logger {
476
+ network_graph : G ,
477
+ logger : L ,
478
+ }
479
+
480
+ impl < G : Deref < Target = NetworkGraph < L > > , L : Deref > PickhardtRouter < G , L > where L :: Target : Logger {
481
+ /// Creates a new router using the given [`NetworkGraph`], a [`Logger`], and a randomness source
482
+ /// `random_seed_bytes`.
483
+ pub fn new ( network_graph : G , logger : L ) -> Self {
484
+ Self { network_graph, logger }
485
+ }
486
+ }
487
+
488
+ use lightning:: routing:: pickhardt_router:: pickhardt_router;
489
+
490
+ impl < G : Deref < Target = NetworkGraph < L > > , L : Deref , S : Score > Router < S > for PickhardtRouter < G , L >
491
+ where L :: Target : Logger {
492
+ fn find_route (
493
+ & self , payer : & PublicKey , params : & RouteParameters , _payment_hash : & PaymentHash ,
494
+ first_hops : Option < & [ & ChannelDetails ] > , scorer : & S
495
+ ) -> Result < Route , LightningError > {
496
+ pickhardt_router:: find_route (
497
+ payer, params, & self . network_graph , first_hops, & * self . logger , scorer)
498
+ }
499
+ }
500
+
473
501
impl < Signer : Sign , M : Deref , T : Deref , K : Deref , F : Deref , L : Deref > Payer for ChannelManager < Signer , M , T , K , F , L >
474
502
where
475
503
M :: Target : chain:: Watch < Signer > ,
0 commit comments