|
21 | 21 | //!
|
22 | 22 | //! # Example
|
23 | 23 | //!
|
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 | +//! ``` |
25 | 93 | //!
|
26 | 94 | //! # Note
|
27 | 95 | //!
|
|
0 commit comments