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 sender
23    receiver: Arc<Mutex<tokio::sync::mpsc::Receiver<String>>>,
24    /// Update sender
25    sender: tokio::sync::mpsc::Sender<String>,
26}
27
28impl LNBitsClient {
29    /// Create a new LNBitsClient
30    pub fn new(
31        // Can be used later
32        _wallet_id: &str,
33        admin_key: &str,
34        invoice_read_key: &str,
35        lnbits_url: &str,
36        tor_socket: Option<&str>,
37    ) -> Result<LNBitsClient> {
38        let lnbits_url = Url::parse(lnbits_url)?;
39
40        let client = {
41            if let Some(tor_socket) = tor_socket {
42                let proxy = reqwest::Proxy::all(tor_socket).expect("tor proxy should be there");
43                reqwest::Client::builder().proxy(proxy).build()?
44            } else {
45                reqwest::Client::builder().build()?
46            }
47        };
48
49        let (sender, receiver) = tokio::sync::mpsc::channel(8);
50
51        Ok(LNBitsClient {
52            // wallet_id,
53            admin_key: admin_key.to_string(),
54            invoice_read_key: invoice_read_key.to_string(),
55            lnbits_url,
56            // tor_socket,
57            reqwest_client: client,
58            sender,
59            receiver: Arc::new(Mutex::new(receiver)),
60        })
61    }
62
63    /// Incoming Receiver
64    pub fn receiver(&self) -> Arc<Mutex<tokio::sync::mpsc::Receiver<String>>> {
65        self.receiver.clone()
66    }
67}