bs_gl_plugin/
requests.rs

1pub use clightningrpc::requests::*;
2use serde::{Serialize, Serializer};
3
4#[derive(Debug, Clone)]
5pub struct Outpoint {
6    pub txid: Vec<u8>,
7    pub outnum: u16,
8}
9
10#[derive(Debug, Clone)]
11pub enum Amount {
12    Millisatoshi(u64),
13    Satoshi(u64),
14    Bitcoin(u64),
15    All,
16    Any,
17}
18
19impl Serialize for Amount {
20    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
21    where
22        S: Serializer,
23    {
24        match *self {
25            Amount::Millisatoshi(a) => serializer.serialize_str(&format!("{}msat", a)),
26            Amount::Satoshi(a) => serializer.serialize_str(&format!("{}sat", a)),
27            Amount::Bitcoin(a) => serializer.serialize_str(&format!("{}btc", a)),
28            Amount::All => serializer.serialize_str(&format!("all")),
29            Amount::Any => serializer.serialize_str(&format!("any")),
30        }
31    }
32}
33
34#[derive(Clone, Debug)]
35pub enum Feerate {
36    Normal,
37    Slow,
38    Urgent,
39    PerKw(u64),
40    PerKb(u64),
41}
42
43impl Serialize for Feerate {
44    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
45    where
46        S: Serializer,
47    {
48        match *self {
49            Feerate::Normal => serializer.serialize_str("normal"),
50            Feerate::Slow => serializer.serialize_str("slow"),
51            Feerate::Urgent => serializer.serialize_str("urgent"),
52            Feerate::PerKb(n) => serializer.serialize_str(&format!("{}perkb", n)),
53            Feerate::PerKw(n) => serializer.serialize_str(&format!("{}perkw", n)),
54        }
55    }
56}
57impl Serialize for Outpoint {
58    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
59    where
60        S: Serializer,
61    {
62        serializer.serialize_str(&format!("{}:{}", hex::encode(&self.txid), self.outnum))
63    }
64}
65
66#[derive(Debug, Clone, Serialize)]
67pub struct Withdraw {
68    pub destination: String,
69
70    #[serde(rename = "satoshi")]
71    pub amount: Amount,
72
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub feerate: Option<Feerate>,
75
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub minconf: Option<u32>,
78
79    #[serde(skip_serializing_if = "Option::is_none")]
80    pub utxos: Option<Vec<Outpoint>>,
81}
82
83#[derive(Debug, Clone, Serialize)]
84pub struct FundChannel {
85    pub id: String,
86    pub amount: Amount,
87
88    #[serde(skip_serializing_if = "Option::is_none")]
89    pub feerate: Option<Feerate>,
90
91    #[serde(skip_serializing_if = "Option::is_none")]
92    pub announce: Option<bool>,
93
94    #[serde(skip_serializing_if = "Option::is_none")]
95    pub minconf: Option<u32>,
96
97    #[serde(skip_serializing_if = "Option::is_none")]
98    pub close_to: Option<String>,
99}
100
101#[derive(Debug, Clone, Serialize)]
102pub struct CloseChannel {
103    #[serde(rename = "id")]
104    pub node_id: String,
105    #[serde(rename = "unilateraltimeout", skip_serializing_if = "Option::is_none")]
106    pub timeout: Option<u32>,
107    #[serde(skip_serializing_if = "Option::is_none")]
108    pub destination: Option<String>,
109}
110
111#[derive(Debug, Clone, Serialize)]
112pub struct Invoice {
113    pub amount_msat: cln_rpc::primitives::AmountOrAny,
114    pub description: String,
115    pub label: String,
116    #[serde(skip_serializing_if = "Option::is_none")]
117    pub expiry: Option<u64>,
118    #[serde(skip_serializing_if = "Option::is_none")]
119    pub fallbacks: Option<Vec<String>>,
120    #[serde(skip_serializing_if = "Option::is_none")]
121    pub preimage: Option<String>,
122    #[serde(skip_serializing_if = "Option::is_none")]
123    pub cltv: Option<u32>,
124    #[serde(skip_serializing_if = "Option::is_none")]
125    pub deschashonly: Option<bool>,
126    #[serde(skip_serializing_if = "Option::is_none")]
127    pub exposeprivatechannels: Option<Vec<String>>,
128    #[serde(rename = "dev-routes", skip_serializing_if = "Option::is_none")]
129    pub dev_routes: Option<Vec<Vec<RoutehintHopDev>>>,
130}
131
132#[derive(Debug, Clone, Serialize)]
133pub struct ListFunds {}
134
135#[derive(Debug, Clone, Serialize)]
136pub struct Pay {
137    pub bolt11: String,
138    #[serde(rename = "msatoshi", skip_serializing_if = "Option::is_none")]
139    pub amount: Option<Amount>,
140    #[serde(skip_serializing_if = "Option::is_none")]
141    pub retry_for: Option<u32>,
142
143    #[serde(skip_serializing_if = "Option::is_none")]
144    pub maxfeepercent: Option<f64>,
145
146    #[serde(skip_serializing_if = "Option::is_none")]
147    pub maxfee: Option<Amount>,
148}
149
150#[derive(Debug, Clone, Serialize)]
151pub struct ListPays {
152    #[serde(skip_serializing_if = "Option::is_none")]
153    pub bolt11: Option<String>,
154    #[serde(skip_serializing_if = "Option::is_none")]
155    pub payment_hash: Option<String>,
156}
157
158#[derive(Debug, Clone, Serialize)]
159pub struct ListInvoices {
160    #[serde(skip_serializing_if = "Option::is_none")]
161    pub label: Option<String>,
162    #[serde(skip_serializing_if = "Option::is_none")]
163    pub invstring: Option<String>,
164    #[serde(skip_serializing_if = "Option::is_none")]
165    pub payment_hash: Option<String>,
166}
167
168#[derive(Debug, Clone, Serialize)]
169pub struct RoutehintHop {
170    pub id: String,
171    pub scid: String,
172    pub feebase: u64,
173    pub feeprop: u32,
174    pub expirydelta: u16,
175}
176
177// This variant is used by dev-routes, using slightly different key names.
178// TODO Remove once we have consolidated the routehint format.
179#[derive(Debug, Clone, Serialize)]
180pub struct RoutehintHopDev {
181    pub id: String,
182    pub short_channel_id: String,
183    pub fee_base_msat: u64,
184    pub fee_proportional_millionths: u32,
185    pub cltv_expiry_delta: u16,
186}
187
188use std::collections::HashMap;
189#[derive(Debug, Clone, Serialize)]
190pub struct Keysend {
191    pub destination: String,
192    pub msatoshi: Amount,
193    pub label: String,
194    #[serde(skip_serializing_if = "Option::is_none")]
195    pub maxfeepercent: Option<u32>,
196    #[serde(skip_serializing_if = "Option::is_none")]
197    pub retry_for: Option<u32>,
198    #[serde(skip_serializing_if = "Option::is_none")]
199    pub maxdelay: Option<u32>,
200    #[serde(skip_serializing_if = "Option::is_none")]
201    pub exemptfee: Option<u64>,
202    #[serde(skip_serializing_if = "Option::is_none")]
203    pub routehints: Option<Vec<Vec<RoutehintHop>>>,
204    #[serde(skip_serializing_if = "Option::is_none")]
205    pub extratlvs: Option<HashMap<u64, String>>,
206}
207
208#[derive(Debug, Clone, Serialize)]
209pub struct ListIncoming {}