1use crate::primitives::*;
7use serde::{Serialize, Deserialize};
8#[derive(Clone, Debug, Deserialize, Serialize)]
9pub enum Notification {
10 #[serde(rename = "block_added")]
11 BlockAdded(BlockAddedNotification),
12 #[serde(rename = "channel_open_failed")]
13 ChannelOpenFailed(ChannelOpenFailedNotification),
14 #[serde(rename = "channel_opened")]
15 ChannelOpened(ChannelOpenedNotification),
16 #[serde(rename = "connect")]
17 Connect(ConnectNotification),
18 #[serde(rename = "custommsg")]
19 CustomMsg(CustomMsgNotification),
20 #[serde(rename = "channel_state_changed")]
21 ChannelStateChanged(ChannelStateChangedNotification),
22}
23
24
25#[derive(Clone, Debug, Deserialize, Serialize)]
26pub struct BlockAddedNotification {
27 pub hash: Sha256,
28 pub height: u32,
29}
30
31#[derive(Clone, Debug, Deserialize, Serialize)]
32pub struct ChannelOpenFailedNotification {
33 pub channel_id: Sha256,
34}
35
36#[derive(Clone, Debug, Deserialize, Serialize)]
37pub struct ChannelOpenedNotification {
38 pub channel_ready: bool,
39 pub funding_msat: Amount,
40 pub funding_txid: String,
41 pub id: PublicKey,
42}
43
44#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
46#[allow(non_camel_case_types)]
47pub enum PeerConnectDirection {
48 #[serde(rename = "in")]
49 IN = 0,
50 #[serde(rename = "out")]
51 OUT = 1,
52}
53
54impl TryFrom<i32> for PeerConnectDirection {
55 type Error = anyhow::Error;
56 fn try_from(c: i32) -> Result<PeerConnectDirection, anyhow::Error> {
57 match c {
58 0 => Ok(PeerConnectDirection::IN),
59 1 => Ok(PeerConnectDirection::OUT),
60 o => Err(anyhow::anyhow!("Unknown variant {} for enum PeerConnectDirection", o)),
61 }
62 }
63}
64
65impl ToString for PeerConnectDirection {
66 fn to_string(&self) -> String {
67 match self {
68 PeerConnectDirection::IN => "IN",
69 PeerConnectDirection::OUT => "OUT",
70 }.to_string()
71 }
72}
73
74#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
76#[allow(non_camel_case_types)]
77pub enum PeerConnectAddressType {
78 #[serde(rename = "local socket")]
79 LOCAL_SOCKET = 0,
80 #[serde(rename = "ipv4")]
81 IPV4 = 1,
82 #[serde(rename = "ipv6")]
83 IPV6 = 2,
84 #[serde(rename = "torv2")]
85 TORV2 = 3,
86 #[serde(rename = "torv3")]
87 TORV3 = 4,
88 #[serde(rename = "websocket")]
89 WEBSOCKET = 5,
90}
91
92impl TryFrom<i32> for PeerConnectAddressType {
93 type Error = anyhow::Error;
94 fn try_from(c: i32) -> Result<PeerConnectAddressType, anyhow::Error> {
95 match c {
96 0 => Ok(PeerConnectAddressType::LOCAL_SOCKET),
97 1 => Ok(PeerConnectAddressType::IPV4),
98 2 => Ok(PeerConnectAddressType::IPV6),
99 3 => Ok(PeerConnectAddressType::TORV2),
100 4 => Ok(PeerConnectAddressType::TORV3),
101 5 => Ok(PeerConnectAddressType::WEBSOCKET),
102 o => Err(anyhow::anyhow!("Unknown variant {} for enum PeerConnectAddressType", o)),
103 }
104 }
105}
106
107impl ToString for PeerConnectAddressType {
108 fn to_string(&self) -> String {
109 match self {
110 PeerConnectAddressType::LOCAL_SOCKET => "LOCAL_SOCKET",
111 PeerConnectAddressType::IPV4 => "IPV4",
112 PeerConnectAddressType::IPV6 => "IPV6",
113 PeerConnectAddressType::TORV2 => "TORV2",
114 PeerConnectAddressType::TORV3 => "TORV3",
115 PeerConnectAddressType::WEBSOCKET => "WEBSOCKET",
116 }.to_string()
117 }
118}
119
120#[derive(Clone, Debug, Deserialize, Serialize)]
121pub struct ConnectAddress {
122 #[serde(skip_serializing_if = "Option::is_none")]
123 pub address: Option<String>,
124 #[serde(skip_serializing_if = "Option::is_none")]
125 pub port: Option<u16>,
126 #[serde(skip_serializing_if = "Option::is_none")]
127 pub socket: Option<String>,
128 #[serde(rename = "type")]
130 pub item_type: PeerConnectAddressType,
131}
132
133#[derive(Clone, Debug, Deserialize, Serialize)]
134pub struct ConnectNotification {
135 pub direction: PeerConnectDirection,
137 pub address: ConnectAddress,
138 pub id: PublicKey,
139}
140
141#[derive(Clone, Debug, Deserialize, Serialize)]
142pub struct CustomMsgNotification {
143 pub payload: String,
144 pub peer_id: PublicKey,
145}
146
147#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
149#[allow(non_camel_case_types)]
150pub enum ChannelStateChangedCause {
151 #[serde(rename = "unknown")]
152 UNKNOWN = 0,
153 #[serde(rename = "local")]
154 LOCAL = 1,
155 #[serde(rename = "user")]
156 USER = 2,
157 #[serde(rename = "remote")]
158 REMOTE = 3,
159 #[serde(rename = "protocol")]
160 PROTOCOL = 4,
161 #[serde(rename = "onchain")]
162 ONCHAIN = 5,
163}
164
165impl TryFrom<i32> for ChannelStateChangedCause {
166 type Error = anyhow::Error;
167 fn try_from(c: i32) -> Result<ChannelStateChangedCause, anyhow::Error> {
168 match c {
169 0 => Ok(ChannelStateChangedCause::UNKNOWN),
170 1 => Ok(ChannelStateChangedCause::LOCAL),
171 2 => Ok(ChannelStateChangedCause::USER),
172 3 => Ok(ChannelStateChangedCause::REMOTE),
173 4 => Ok(ChannelStateChangedCause::PROTOCOL),
174 5 => Ok(ChannelStateChangedCause::ONCHAIN),
175 o => Err(anyhow::anyhow!("Unknown variant {} for enum ChannelStateChangedCause", o)),
176 }
177 }
178}
179
180impl ToString for ChannelStateChangedCause {
181 fn to_string(&self) -> String {
182 match self {
183 ChannelStateChangedCause::UNKNOWN => "UNKNOWN",
184 ChannelStateChangedCause::LOCAL => "LOCAL",
185 ChannelStateChangedCause::USER => "USER",
186 ChannelStateChangedCause::REMOTE => "REMOTE",
187 ChannelStateChangedCause::PROTOCOL => "PROTOCOL",
188 ChannelStateChangedCause::ONCHAIN => "ONCHAIN",
189 }.to_string()
190 }
191}
192
193#[derive(Clone, Debug, Deserialize, Serialize)]
194pub struct ChannelStateChangedNotification {
195 #[serde(skip_serializing_if = "Option::is_none")]
196 pub message: Option<String>,
197 #[serde(skip_serializing_if = "Option::is_none")]
198 pub old_state: Option<ChannelState>,
199 #[serde(skip_serializing_if = "Option::is_none")]
200 pub short_channel_id: Option<ShortChannelId>,
201 pub cause: ChannelStateChangedCause,
203 pub new_state: ChannelState,
205 pub channel_id: Sha256,
206 pub peer_id: PublicKey,
207 pub timestamp: String,
208}
209
210pub mod requests{
211use serde::{Serialize, Deserialize};
212
213 #[derive(Clone, Debug, Deserialize, Serialize)]
214 pub struct StreamBlockAddedRequest {
215 }
216
217 #[derive(Clone, Debug, Deserialize, Serialize)]
218 pub struct StreamChannelOpenFailedRequest {
219 }
220
221 #[derive(Clone, Debug, Deserialize, Serialize)]
222 pub struct StreamChannelOpenedRequest {
223 }
224
225 #[derive(Clone, Debug, Deserialize, Serialize)]
226 pub struct StreamConnectRequest {
227 }
228
229 #[derive(Clone, Debug, Deserialize, Serialize)]
230 pub struct StreamCustomMsgRequest {
231 }
232
233 #[derive(Clone, Debug, Deserialize, Serialize)]
234 pub struct StreamChannelStateChangedRequest {
235 }
236
237}