Merge pull request #1219 from TheBlueMatt/2021-12-0.0.104-bindings 2021-12-0.0.104-bindings
authorMatt Corallo <649246+TheBlueMatt@users.noreply.github.com>
Sun, 19 Dec 2021 23:56:34 +0000 (23:56 +0000)
committerGitHub <noreply@github.com>
Sun, 19 Dec 2021 23:56:34 +0000 (23:56 +0000)
0.0.104 bindings

lightning-invoice/src/payment.rs
lightning/src/routing/network_graph.rs
lightning/src/routing/scoring.rs

index d08f38facd45acbc5c173d147499f49d72779619..d82ff1f4e83c5676bd104d400ebd356419def392 100644 (file)
@@ -133,7 +133,7 @@ use bitcoin_hashes::sha256::Hash as Sha256;
 use lightning::ln::{PaymentHash, PaymentPreimage, PaymentSecret};
 use lightning::ln::channelmanager::{ChannelDetails, PaymentId, PaymentSendFailure};
 use lightning::ln::msgs::LightningError;
-use lightning::routing::scoring::{LockableScore, Score};
+use lightning::routing::scoring::{LockableScore, MultiThreadedLockableScore, Score};
 use lightning::routing::router::{Payee, Route, RouteParameters};
 use lightning::util::events::{Event, EventHandler};
 use lightning::util::logger::Logger;
@@ -150,17 +150,15 @@ use std::time::{Duration, SystemTime};
 /// See [module-level documentation] for details.
 ///
 /// [module-level documentation]: crate::payment
-pub struct InvoicePayer<P: Deref, R, S: Deref, L: Deref, E>
+pub struct InvoicePayer<P: Deref, S: Score, R: Deref, SR: Deref<Target = MultiThreadedLockableScore<S>>, L: Deref, E: EventHandler>
 where
        P::Target: Payer,
-       R: for <'a> Router<<<S as Deref>::Target as LockableScore<'a>>::Locked>,
-       S::Target: for <'a> LockableScore<'a>,
+       R::Target: Router<S>,
        L::Target: Logger,
-       E: EventHandler,
 {
        payer: P,
        router: R,
-       scorer: S,
+       scorer: SR,
        logger: L,
        event_handler: E,
        /// Caches the overall attempts at making a payment, which is updated prior to retrying.
@@ -221,20 +219,18 @@ pub enum PaymentError {
        Sending(PaymentSendFailure),
 }
 
-impl<P: Deref, R, S: Deref, L: Deref, E> InvoicePayer<P, R, S, L, E>
+impl<P: Deref, S: Score, R: Deref, SR: Deref<Target = MultiThreadedLockableScore<S>>, L: Deref, E: EventHandler> InvoicePayer<P, S, R, SR, L, E>
 where
        P::Target: Payer,
-       R: for <'a> Router<<<S as Deref>::Target as LockableScore<'a>>::Locked>,
-       S::Target: for <'a> LockableScore<'a>,
+       R::Target: Router<S>,
        L::Target: Logger,
-       E: EventHandler,
 {
        /// Creates an invoice payer that retries failed payment paths.
        ///
        /// Will forward any [`Event::PaymentPathFailed`] events to the decorated `event_handler` once
        /// `retry_attempts` has been exceeded for a given [`Invoice`].
        pub fn new(
-               payer: P, router: R, scorer: S, logger: L, event_handler: E, retry_attempts: RetryAttempts
+               payer: P, router: R, scorer: SR, logger: L, event_handler: E, retry_attempts: RetryAttempts
        ) -> Self {
                Self {
                        payer,
@@ -455,13 +451,11 @@ fn has_expired(params: &RouteParameters) -> bool {
        } else { false }
 }
 
-impl<P: Deref, R, S: Deref, L: Deref, E> EventHandler for InvoicePayer<P, R, S, L, E>
+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>
 where
        P::Target: Payer,
-       R: for <'a> Router<<<S as Deref>::Target as LockableScore<'a>>::Locked>,
-       S::Target: for <'a> LockableScore<'a>,
+       R::Target: Router<S>,
        L::Target: Logger,
-       E: EventHandler,
 {
        fn handle_event(&self, event: &Event) {
                match event {
index 8f3c44b80a754bf034921b16567aee184f874e45..ae597d30364f5ca039cac07c99d5d317179a750e 100644 (file)
@@ -251,6 +251,8 @@ where C::Target: chain::Access, L::Target: Logger
 
        /// Gets a reference to the underlying [`NetworkGraph`] which was provided in
        /// [`NetGraphMsgHandler::new`].
+       ///
+       /// (C-not exported) as bindings don't support a reference-to-a-reference yet
        pub fn network_graph(&self) -> &G {
                &self.network_graph
        }
index 2b2839d69db82ec2640f7f24c02824b4d79b0b0b..20a8afcabcf827298229cb44ff9903cbc000c9f6 100644 (file)
@@ -168,6 +168,14 @@ impl<'a, T: Score + 'a> LockableScore<'a> for MultiThreadedLockableScore<T> {
        }
 }
 
+#[cfg(c_bindings)]
+impl<T: Score> MultiThreadedLockableScore<T> {
+       /// Creates a new [`MultiThreadedLockableScore`] given an underlying [`Score`].
+       pub fn new(score: T) -> Self {
+               MultiThreadedLockableScore { score: Mutex::new(score) }
+       }
+}
+
 #[cfg(c_bindings)]
 /// (C-not exported)
 impl<'a, T: Writeable> Writeable for RefMut<'a, T> {