Skip to content

Commit a913b97

Browse files
committed
(Bindings Only) Concretize LockableScore as MultiThreadedLockableScore
We don't really care about more than this in bindings - calling into a custom `Score` is likely too slow to be practical anyway, so this is also a performance improvement. Works around rust-lang/rust#90448
1 parent 82b8d85 commit a913b97

File tree

1 file changed

+9
-12
lines changed

1 file changed

+9
-12
lines changed

lightning-invoice/src/payment.rs

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ use crate::prelude::*;
142142
use lightning::ln::{PaymentHash, PaymentPreimage, PaymentSecret};
143143
use lightning::ln::channelmanager::{ChannelDetails, PaymentId, PaymentSendFailure};
144144
use lightning::ln::msgs::LightningError;
145-
use lightning::routing::scoring::{LockableScore, Score};
145+
use lightning::routing::scoring::{LockableScore, MultiThreadedLockableScore, Score};
146146
use lightning::routing::router::{PaymentParameters, Route, RouteParameters};
147147
use lightning::util::events::{Event, EventHandler};
148148
use lightning::util::logger::Logger;
@@ -160,16 +160,15 @@ use std::time::SystemTime;
160160
/// See [module-level documentation] for details.
161161
///
162162
/// [module-level documentation]: crate::payment
163-
pub struct InvoicePayer<P: Deref, R, S: Deref, L: Deref, E: EventHandler>
163+
pub struct InvoicePayer<P: Deref, S: Score, R: Deref, SR: Deref<Target = MultiThreadedLockableScore<S>>, L: Deref, E: EventHandler>
164164
where
165165
P::Target: Payer,
166-
R: for <'a> Router<<<S as Deref>::Target as LockableScore<'a>>::Locked>,
167-
S::Target: for <'a> LockableScore<'a>,
166+
R::Target: Router<S>,
168167
L::Target: Logger,
169168
{
170169
payer: P,
171170
router: R,
172-
scorer: S,
171+
scorer: SR,
173172
logger: L,
174173
event_handler: E,
175174
/// Caches the overall attempts at making a payment, which is updated prior to retrying.
@@ -230,19 +229,18 @@ pub enum PaymentError {
230229
Sending(PaymentSendFailure),
231230
}
232231

233-
impl<P: Deref, R, S: Deref, L: Deref, E: EventHandler> InvoicePayer<P, R, S, L, E>
232+
impl<P: Deref, S: Score, R: Deref, SR: Deref<Target = MultiThreadedLockableScore<S>>, L: Deref, E: EventHandler> InvoicePayer<P, S, R, SR, L, E>
234233
where
235234
P::Target: Payer,
236-
R: for <'a> Router<<<S as Deref>::Target as LockableScore<'a>>::Locked>,
237-
S::Target: for <'a> LockableScore<'a>,
235+
R::Target: Router<S>,
238236
L::Target: Logger,
239237
{
240238
/// Creates an invoice payer that retries failed payment paths.
241239
///
242240
/// Will forward any [`Event::PaymentPathFailed`] events to the decorated `event_handler` once
243241
/// `retry_attempts` has been exceeded for a given [`Invoice`].
244242
pub fn new(
245-
payer: P, router: R, scorer: S, logger: L, event_handler: E, retry_attempts: RetryAttempts
243+
payer: P, router: R, scorer: SR, logger: L, event_handler: E, retry_attempts: RetryAttempts
246244
) -> Self {
247245
Self {
248246
payer,
@@ -468,11 +466,10 @@ fn has_expired(route_params: &RouteParameters) -> bool {
468466
} else { false }
469467
}
470468

471-
impl<P: Deref, R, S: Deref, L: Deref, E: EventHandler> EventHandler for InvoicePayer<P, R, S, L, E>
469+
impl<P: Deref, S: Score, R: Deref, SR: Deref<Target = MultiThreadedLockableScore<S>>, L: Deref, E: EventHandler> EventHandler for InvoicePayer<P, S, R, SR, L, E>
472470
where
473471
P::Target: Payer,
474-
R: for <'a> Router<<<S as Deref>::Target as LockableScore<'a>>::Locked>,
475-
S::Target: for <'a> LockableScore<'a>,
472+
R::Target: Router<S>,
476473
L::Target: Logger,
477474
{
478475
fn handle_event(&self, event: &Event) {

0 commit comments

Comments
 (0)