Skip to content

Commit ed32be2

Browse files
committed
f - Add example code
1 parent f409fd1 commit ed32be2

File tree

1 file changed

+69
-1
lines changed

1 file changed

+69
-1
lines changed

lightning-invoice/src/payment.rs

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,75 @@
2121
//!
2222
//! # Example
2323
//!
24-
//! TODO: Fill this in once the API is finalized.
24+
//! ```
25+
//! # extern crate lightning;
26+
//! # extern crate lightning_invoice;
27+
//! # extern crate secp256k1;
28+
//! #
29+
//! # use lightning::ln::{PaymentHash, PaymentSecret};
30+
//! # use lightning::ln::channelmanager::{ChannelDetails, PaymentSendFailure};
31+
//! # use lightning::ln::features::InvoiceFeatures;
32+
//! # use lightning::ln::msgs::LightningError;
33+
//! # use lightning::routing::router::{Route, RouteHint};
34+
//! # use lightning::util::events::{Event, EventHandler, EventsProvider};
35+
//! # use lightning::util::logger::{Logger, Record};
36+
//! # use lightning_invoice::Invoice;
37+
//! # use lightning_invoice::payment::{InvoicePayer, Payer, Router};
38+
//! # use secp256k1::key::PublicKey;
39+
//! # use std::ops::Deref;
40+
//! #
41+
//! # struct FakeEventProvider {}
42+
//! # impl EventsProvider for FakeEventProvider {
43+
//! # fn process_pending_events<H: Deref>(&self, handler: H) where H::Target: EventHandler {}
44+
//! # }
45+
//! #
46+
//! # struct FakePayer {}
47+
//! # impl Payer for FakePayer {
48+
//! # fn node_id(&self) -> PublicKey { unimplemented!() }
49+
//! # fn first_hops(&self) -> Vec<ChannelDetails> { unimplemented!() }
50+
//! # fn send_payment(
51+
//! # &self, route: &Route, payment_hash: PaymentHash, payment_secret: &Option<PaymentSecret>
52+
//! # ) -> Result<(), PaymentSendFailure> { unimplemented!() }
53+
//! # }
54+
//! #
55+
//! # struct FakeRouter {};
56+
//! # impl Router for FakeRouter {
57+
//! # fn find_route(
58+
//! # &self, payer: &PublicKey, payee: &PublicKey, payee_features: Option<InvoiceFeatures>,
59+
//! # first_hops: Option<&[&ChannelDetails]>, last_hops: &[&RouteHint],
60+
//! # final_value_msat: u64, final_cltv: u32
61+
//! # ) -> Result<Route, LightningError> { unimplemented!() }
62+
//! # }
63+
//! #
64+
//! # struct FakeLogger {};
65+
//! # impl Logger for FakeLogger {
66+
//! # fn log(&self, record: &Record) { unimplemented!() }
67+
//! # }
68+
//! #
69+
//! # fn main() {
70+
//! let event_handler = |event: &Event| {
71+
//! match event {
72+
//! Event::PaymentPathFailed { .. } => println!("payment failed after retries"),
73+
//! Event::PaymentSent { .. } => println!("payment successful"),
74+
//! _ => {},
75+
//! }
76+
//! };
77+
//! # let payer = FakePayer {};
78+
//! # let router = FakeRouter {};
79+
//! # let logger = FakeLogger {};
80+
//! let invoice_payer = InvoicePayer::new(&payer, router, &logger, event_handler)
81+
//! .with_retry_attempts(2);
82+
//!
83+
//! let invoice = "...";
84+
//! let invoice = invoice.parse::<Invoice>().unwrap();
85+
//! invoice_payer.pay_invoice(&invoice).unwrap();
86+
//!
87+
//! # let event_provider = FakeEventProvider {};
88+
//! loop {
89+
//! event_provider.process_pending_events(&invoice_payer);
90+
//! }
91+
//! # }
92+
//! ```
2593
//!
2694
//! # Note
2795
//!

0 commit comments

Comments
 (0)