lnbits_rs/
lib.rs

1#![doc = include_str!("../README.md")]
2#![warn(missing_docs)]
3#![warn(rustdoc::bare_urls)]
4
5use std::sync::Arc;
6
7use anyhow::Result;
8use reqwest::Url;
9use tokio::sync::Mutex;
10
11pub mod api;
12
13#[derive(Clone)]
14/// The LNBitsClient struct
15pub struct LNBitsClient {
16    // wallet_id: String, // Can be used later
17    admin_key: String,
18    invoice_read_key: String,
19    lnbits_url: Url,
20    // tor_socket: Option<String>, // Can be used later
21    reqwest_client: reqwest::Client,
22    /// Update receiver
23    receiver: Arc<Mutex<tokio::sync::mpsc::Receiver<String>>>,
24}
25
26impl LNBitsClient {
27    /// Create a new LNBitsClient
28    pub fn new(
29        // Can be used later
30        _wallet_id: &str,
31        admin_key: &str,
32        invoice_read_key: &str,
33        lnbits_url: &str,
34        tor_socket: Option<&str>,
35    ) -> Result<LNBitsClient> {
36        let lnbits_url = Url::parse(lnbits_url)?;
37
38        let client = {
39            if let Some(tor_socket) = tor_socket {
40                let proxy = reqwest::Proxy::all(tor_socket).expect("tor proxy should be there");
41                reqwest::Client::builder().proxy(proxy).build()?
42            } else {
43                reqwest::Client::builder().build()?
44            }
45        };
46
47        let (_sender, receiver) = tokio::sync::mpsc::channel(8);
48
49        Ok(LNBitsClient {
50            // wallet_id,
51            admin_key: admin_key.to_string(),
52            invoice_read_key: invoice_read_key.to_string(),
53            lnbits_url,
54            // tor_socket,
55            reqwest_client: client,
56            receiver: Arc::new(Mutex::new(receiver)),
57        })
58    }
59
60    /// Incoming Receiver
61    pub fn receiver(&self) -> Arc<Mutex<tokio::sync::mpsc::Receiver<String>>> {
62        self.receiver.clone()
63    }
64}