Skip to content

Commit 7f5122b

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 d7008e0 commit 7f5122b

File tree

1 file changed

+13
-15
lines changed

1 file changed

+13
-15
lines changed

lightning-invoice/src/payment.rs

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ use bitcoin_hashes::sha256::Hash as Sha256;
133133
use lightning::ln::{PaymentHash, PaymentPreimage, PaymentSecret};
134134
use lightning::ln::channelmanager::{ChannelDetails, PaymentId, PaymentSendFailure};
135135
use lightning::ln::msgs::LightningError;
136-
use lightning::routing::scoring::{LockableScore, Score};
136+
use lightning::routing::scoring::{LockableScore, MultiThreadedLockableScore, Score};
137137
use lightning::routing::router::{Payee, Route, RouteParameters};
138138
use lightning::util::events::{Event, EventHandler};
139139
use lightning::util::logger::Logger;
@@ -150,17 +150,16 @@ use std::time::{Duration, SystemTime};
150150
/// See [module-level documentation] for details.
151151
///
152152
/// [module-level documentation]: crate::payment
153-
pub struct InvoicePayer<P: Deref, R, S: Deref, L: Deref, E>
153+
pub struct InvoicePayer<P: Deref, S: Score, R: Deref, SR: Deref<Target = MultiThreadedLockableScore<S>>, L: Deref, E: Deref>
154154
where
155155
P::Target: Payer,
156-
R: for <'a> Router<<<S as Deref>::Target as LockableScore<'a>>::Locked>,
157-
S::Target: for <'a> LockableScore<'a>,
156+
R::Target: Router<S>,
158157
L::Target: Logger,
159-
E: EventHandler,
158+
E::Target: EventHandler,
160159
{
161160
payer: P,
162161
router: R,
163-
scorer: S,
162+
scorer: SR,
164163
logger: L,
165164
event_handler: E,
166165
/// Caches the overall attempts at making a payment, which is updated prior to retrying.
@@ -221,20 +220,19 @@ pub enum PaymentError {
221220
Sending(PaymentSendFailure),
222221
}
223222

224-
impl<P: Deref, R, S: Deref, L: Deref, E> InvoicePayer<P, R, S, L, E>
223+
impl<P: Deref, S: Score, R: Deref, SR: Deref<Target = MultiThreadedLockableScore<S>>, L: Deref, E: Deref> InvoicePayer<P, S, R, SR, L, E>
225224
where
226225
P::Target: Payer,
227-
R: for <'a> Router<<<S as Deref>::Target as LockableScore<'a>>::Locked>,
228-
S::Target: for <'a> LockableScore<'a>,
226+
R::Target: Router<S>,
229227
L::Target: Logger,
230-
E: EventHandler,
228+
E::Target: EventHandler,
231229
{
232230
/// Creates an invoice payer that retries failed payment paths.
233231
///
234232
/// Will forward any [`Event::PaymentPathFailed`] events to the decorated `event_handler` once
235233
/// `retry_attempts` has been exceeded for a given [`Invoice`].
236234
pub fn new(
237-
payer: P, router: R, scorer: S, logger: L, event_handler: E, retry_attempts: RetryAttempts
235+
payer: P, router: R, scorer: SR, logger: L, event_handler: E, retry_attempts: RetryAttempts
238236
) -> Self {
239237
Self {
240238
payer,
@@ -455,13 +453,13 @@ fn has_expired(params: &RouteParameters) -> bool {
455453
} else { false }
456454
}
457455

458-
impl<P: Deref, R, S: Deref, L: Deref, E> EventHandler for InvoicePayer<P, R, S, L, E>
456+
457+
impl<P: Deref, S: Score, R: Deref, SR: Deref<Target = MultiThreadedLockableScore<S>>, L: Deref, E: Deref> EventHandler for InvoicePayer<P, S, R, SR, L, E>
459458
where
460459
P::Target: Payer,
461-
R: for <'a> Router<<<S as Deref>::Target as LockableScore<'a>>::Locked>,
462-
S::Target: for <'a> LockableScore<'a>,
460+
R::Target: Router<S>,
463461
L::Target: Logger,
464-
E: EventHandler,
462+
E::Target: EventHandler,
465463
{
466464
fn handle_event(&self, event: &Event) {
467465
match event {

0 commit comments

Comments
 (0)