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#[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 {}