1
+ //! The events emitted by [`LdkLite`] live here.
2
+ //!
3
+ //! [`LdkLite`]: [`crate::LdkLite`]
4
+
1
5
use crate :: {
2
6
hex_utils, ChannelManager , Error , FilesystemPersister , LdkLiteChainAccess , LdkLiteConfig ,
3
7
NetworkGraph , PaymentInfo , PaymentInfoStorage , PaymentStatus ,
@@ -27,79 +31,45 @@ use std::time::Duration;
27
31
/// The event queue will be persisted under this key.
28
32
pub ( crate ) const EVENTS_PERSISTENCE_KEY : & str = "events" ;
29
33
30
- /// An event emitted by [`LdkLite`] that should be handled by the user. This will more often than
31
- /// not wrap a LDK event accessible via the `inner` field.
34
+ /// An event emitted by [`LdkLite`] that should be handled by the user.
35
+ ///
36
+ /// This wraps an event of a specific type and will more often than not wrap a LDK event accessible
37
+ /// via the `inner` field.
38
+ ///
39
+ /// [`LdkLite`]: [`crate::LdkLite`]
32
40
#[ derive( Debug , Clone ) ]
33
41
pub enum LdkLiteEvent {
34
42
/// A payment we sent was successful.
35
- PaymentSuccessful {
36
- /// The hash of the payment.
37
- payment_hash : PaymentHash ,
38
- /// The wrapped LDK event.
39
- inner : ldk_events:: Event ,
40
- } ,
43
+ PaymentSuccessful ( PaymentSuccessfulEvent ) ,
41
44
/// A payment we sent has failed.
42
- PaymentFailed {
43
- /// The hash of the payment.
44
- payment_hash : PaymentHash ,
45
- /// The wrapped LDK event.
46
- inner : ldk_events:: Event ,
47
- } ,
45
+ PaymentFailed ( PaymentFailedEvent ) ,
48
46
/// A payment has been received.
49
- PaymentReceived {
50
- /// The hash of the payment.
51
- payment_hash : PaymentHash ,
52
- /// The value, in thousandths of a satoshi that has been received.
53
- amount_msat : u64 ,
54
- /// The wrapped LDK event.
55
- inner : ldk_events:: Event ,
56
- } ,
47
+ PaymentReceived ( PaymentReceivedEvent ) ,
57
48
// TODO: Implement after a corresponding LDK event is added.
58
- //ChannelOpened {
59
- //},
49
+ //ChannelOpened(ChannelOpenedEvent),
60
50
/// A channel has been closed.
61
- ChannelClosed {
62
- /// The channel_id of the channel which has been closed.
63
- channel_id : [ u8 ; 32 ] ,
64
- /// The wrapped LDK event.
65
- inner : ldk_events:: Event ,
66
- } ,
51
+ ChannelClosed ( ChannelClosedEvent ) ,
67
52
// TODO: Implement on-chain events when better integrating with BDK wallet sync.
68
- //OnChainPaymentSent {
69
- //},
70
- //OnChainPaymentReceived {
71
- //}
53
+ //OnChainPaymentSent(OnChainPaymentSentEvent),
54
+ //OnChainPaymentReceived(OnChainPaymentReceivedEvent),
55
+ }
56
+
57
+ trait EventType {
58
+ const TYPE : u8 ;
72
59
}
73
60
74
61
impl Readable for LdkLiteEvent {
75
62
fn read < R : lightning:: io:: Read > (
76
63
reader : & mut R ,
77
64
) -> Result < Self , lightning:: ln:: msgs:: DecodeError > {
78
65
match Readable :: read ( reader) ? {
79
- 0u8 => {
80
- let payment_hash: PaymentHash = Readable :: read ( reader) ?;
81
- let inner: ldk_events:: Event = MaybeReadable :: read ( reader) ?. unwrap ( ) ;
82
- Ok ( Self :: PaymentSuccessful { payment_hash, inner } )
83
- }
84
- 1u8 => {
85
- let payment_hash: PaymentHash = Readable :: read ( reader) ?;
86
- let inner: ldk_events:: Event = MaybeReadable :: read ( reader) ?. unwrap ( ) ;
87
- Ok ( Self :: PaymentFailed { payment_hash, inner } )
88
- }
89
- 2u8 => {
90
- let payment_hash: PaymentHash = Readable :: read ( reader) ?;
91
- let amount_msat: u64 = Readable :: read ( reader) ?;
92
- let inner: ldk_events:: Event = MaybeReadable :: read ( reader) ?. unwrap ( ) ;
93
- Ok ( Self :: PaymentReceived { payment_hash, amount_msat, inner } )
94
- }
95
- //3u8 => {
66
+ PaymentSuccessfulEvent :: TYPE => Ok ( Self :: PaymentSuccessful ( Readable :: read ( reader) ?) ) ,
67
+ PaymentFailedEvent :: TYPE => Ok ( Self :: PaymentFailed ( Readable :: read ( reader) ?) ) ,
68
+ PaymentReceivedEvent :: TYPE => Ok ( Self :: PaymentReceived ( Readable :: read ( reader) ?) ) ,
69
+ // ChannelOpenedEvent::TYPE => {
96
70
// TODO ChannelOpened
97
71
//}
98
- 4u8 => {
99
- let channel_id: [ u8 ; 32 ] = Readable :: read ( reader) ?;
100
- let inner: ldk_events:: Event = MaybeReadable :: read ( reader) ?. unwrap ( ) ;
101
- Ok ( Self :: ChannelClosed { channel_id, inner } )
102
- }
72
+ ChannelClosedEvent :: TYPE => Ok ( Self :: ChannelClosed ( Readable :: read ( reader) ?) ) ,
103
73
//5u8 => {
104
74
// TODO OnChainPaymentSent
105
75
//}
@@ -114,32 +84,23 @@ impl Readable for LdkLiteEvent {
114
84
impl Writeable for LdkLiteEvent {
115
85
fn write < W : Writer > ( & self , writer : & mut W ) -> Result < ( ) , lightning:: io:: Error > {
116
86
match self {
117
- Self :: PaymentSuccessful { payment_hash, inner } => {
118
- 0u8 . write ( writer) ?;
119
- payment_hash. write ( writer) ?;
120
- inner. write ( writer) ?;
87
+ Self :: PaymentSuccessful ( event) => {
88
+ event. write ( writer) ?;
121
89
Ok ( ( ) )
122
90
}
123
- Self :: PaymentFailed { payment_hash, inner } => {
124
- 1u8 . write ( writer) ?;
125
- payment_hash. write ( writer) ?;
126
- inner. write ( writer) ?;
91
+ Self :: PaymentFailed ( event) => {
92
+ event. write ( writer) ?;
127
93
Ok ( ( ) )
128
94
}
129
- Self :: PaymentReceived { payment_hash, amount_msat, inner } => {
130
- 2u8 . write ( writer) ?;
131
- payment_hash. write ( writer) ?;
132
- amount_msat. write ( writer) ?;
133
- inner. write ( writer) ?;
95
+ Self :: PaymentReceived ( event) => {
96
+ event. write ( writer) ?;
134
97
Ok ( ( ) )
135
98
}
136
99
//Self::ChannelOpened { .. } => {
137
100
//TODO
138
101
//}
139
- Self :: ChannelClosed { channel_id, inner } => {
140
- 4u8 . write ( writer) ?;
141
- channel_id. write ( writer) ?;
142
- inner. write ( writer) ?;
102
+ Self :: ChannelClosed ( event) => {
103
+ event. write ( writer) ?;
143
104
Ok ( ( ) )
144
105
} //Self::OnChainPaymentSent { .. } => {
145
106
//TODO
@@ -151,6 +112,138 @@ impl Writeable for LdkLiteEvent {
151
112
}
152
113
}
153
114
115
+ /// A payment we sent was successful.
116
+ #[ derive( Debug , Clone ) ]
117
+ pub struct PaymentSuccessfulEvent {
118
+ /// The hash of the payment.
119
+ pub payment_hash : PaymentHash ,
120
+ /// The wrapped LDK event.
121
+ pub inner : ldk_events:: Event ,
122
+ }
123
+
124
+ impl EventType for PaymentSuccessfulEvent {
125
+ const TYPE : u8 = 0u8 ;
126
+ }
127
+
128
+ impl Readable for PaymentSuccessfulEvent {
129
+ fn read < R : lightning:: io:: Read > (
130
+ reader : & mut R ,
131
+ ) -> Result < Self , lightning:: ln:: msgs:: DecodeError > {
132
+ let payment_hash: PaymentHash = Readable :: read ( reader) ?;
133
+ let inner: ldk_events:: Event = MaybeReadable :: read ( reader) ?. unwrap ( ) ;
134
+ Ok ( Self { payment_hash, inner } )
135
+ }
136
+ }
137
+
138
+ impl Writeable for PaymentSuccessfulEvent {
139
+ fn write < W : Writer > ( & self , writer : & mut W ) -> Result < ( ) , lightning:: io:: Error > {
140
+ Self :: TYPE . write ( writer) ?;
141
+ self . payment_hash . write ( writer) ?;
142
+ self . inner . write ( writer) ?;
143
+ Ok ( ( ) )
144
+ }
145
+ }
146
+
147
+ /// A payment we sent has failed.
148
+ #[ derive( Debug , Clone ) ]
149
+ pub struct PaymentFailedEvent {
150
+ /// The hash of the payment.
151
+ pub payment_hash : PaymentHash ,
152
+ /// The wrapped LDK event.
153
+ pub inner : ldk_events:: Event ,
154
+ }
155
+
156
+ impl EventType for PaymentFailedEvent {
157
+ const TYPE : u8 = 1u8 ;
158
+ }
159
+
160
+ impl Readable for PaymentFailedEvent {
161
+ fn read < R : lightning:: io:: Read > (
162
+ reader : & mut R ,
163
+ ) -> Result < Self , lightning:: ln:: msgs:: DecodeError > {
164
+ let payment_hash: PaymentHash = Readable :: read ( reader) ?;
165
+ let inner: ldk_events:: Event = MaybeReadable :: read ( reader) ?. unwrap ( ) ;
166
+ Ok ( Self { payment_hash, inner } )
167
+ }
168
+ }
169
+
170
+ impl Writeable for PaymentFailedEvent {
171
+ fn write < W : Writer > ( & self , writer : & mut W ) -> Result < ( ) , lightning:: io:: Error > {
172
+ Self :: TYPE . write ( writer) ?;
173
+ self . payment_hash . write ( writer) ?;
174
+ self . inner . write ( writer) ?;
175
+ Ok ( ( ) )
176
+ }
177
+ }
178
+
179
+ /// A payment has been received.
180
+ #[ derive( Debug , Clone ) ]
181
+ pub struct PaymentReceivedEvent {
182
+ /// The hash of the payment.
183
+ pub payment_hash : PaymentHash ,
184
+ /// The value, in thousandths of a satoshi that has been received.
185
+ pub amount_msat : u64 ,
186
+ /// The wrapped LDK event.
187
+ pub inner : ldk_events:: Event ,
188
+ }
189
+
190
+ impl EventType for PaymentReceivedEvent {
191
+ const TYPE : u8 = 2u8 ;
192
+ }
193
+
194
+ impl Readable for PaymentReceivedEvent {
195
+ fn read < R : lightning:: io:: Read > (
196
+ reader : & mut R ,
197
+ ) -> Result < Self , lightning:: ln:: msgs:: DecodeError > {
198
+ let payment_hash: PaymentHash = Readable :: read ( reader) ?;
199
+ let amount_msat: u64 = Readable :: read ( reader) ?;
200
+ let inner: ldk_events:: Event = MaybeReadable :: read ( reader) ?. unwrap ( ) ;
201
+ Ok ( Self { payment_hash, amount_msat, inner } )
202
+ }
203
+ }
204
+
205
+ impl Writeable for PaymentReceivedEvent {
206
+ fn write < W : Writer > ( & self , writer : & mut W ) -> Result < ( ) , lightning:: io:: Error > {
207
+ Self :: TYPE . write ( writer) ?;
208
+ self . payment_hash . write ( writer) ?;
209
+ self . amount_msat . write ( writer) ?;
210
+ self . inner . write ( writer) ?;
211
+ Ok ( ( ) )
212
+ }
213
+ }
214
+
215
+ /// A channel has been closed.
216
+ #[ derive( Debug , Clone ) ]
217
+ pub struct ChannelClosedEvent {
218
+ /// The channel_id of the channel which has been closed.
219
+ pub channel_id : [ u8 ; 32 ] ,
220
+ /// The wrapped LDK event.
221
+ pub inner : ldk_events:: Event ,
222
+ }
223
+
224
+ impl EventType for ChannelClosedEvent {
225
+ const TYPE : u8 = 4u8 ;
226
+ }
227
+
228
+ impl Readable for ChannelClosedEvent {
229
+ fn read < R : lightning:: io:: Read > (
230
+ reader : & mut R ,
231
+ ) -> Result < Self , lightning:: ln:: msgs:: DecodeError > {
232
+ let channel_id: [ u8 ; 32 ] = Readable :: read ( reader) ?;
233
+ let inner: ldk_events:: Event = MaybeReadable :: read ( reader) ?. unwrap ( ) ;
234
+ Ok ( Self { channel_id, inner } )
235
+ }
236
+ }
237
+
238
+ impl Writeable for ChannelClosedEvent {
239
+ fn write < W : Writer > ( & self , writer : & mut W ) -> Result < ( ) , lightning:: io:: Error > {
240
+ Self :: TYPE . write ( writer) ?;
241
+ self . channel_id . write ( writer) ?;
242
+ self . inner . write ( writer) ?;
243
+ Ok ( ( ) )
244
+ }
245
+ }
246
+
154
247
pub ( crate ) struct LdkLiteEventQueue < K : KVStorePersister > {
155
248
queue : Mutex < EventQueueSerWrapper > ,
156
249
notifier : Condvar ,
@@ -315,11 +408,11 @@ impl ldk_events::EventHandler for LdkLiteEventHandler {
315
408
} ;
316
409
self . channel_manager . claim_funds ( payment_preimage. unwrap ( ) ) ;
317
410
self . event_queue
318
- . add_event ( LdkLiteEvent :: PaymentReceived {
411
+ . add_event ( LdkLiteEvent :: PaymentReceived ( PaymentReceivedEvent {
319
412
payment_hash : * payment_hash,
320
413
amount_msat : * amount_msat,
321
414
inner : event. clone ( ) ,
322
- } )
415
+ } ) )
323
416
. unwrap ( ) ;
324
417
}
325
418
ldk_events:: Event :: PaymentClaimed { payment_hash, purpose, amount_msat } => {
@@ -384,10 +477,10 @@ impl ldk_events::EventHandler for LdkLiteEventHandler {
384
477
}
385
478
}
386
479
self . event_queue
387
- . add_event ( LdkLiteEvent :: PaymentSuccessful {
480
+ . add_event ( LdkLiteEvent :: PaymentSuccessful ( PaymentSuccessfulEvent {
388
481
payment_hash : * payment_hash,
389
482
inner : event. clone ( ) ,
390
- } )
483
+ } ) )
391
484
. unwrap ( ) ;
392
485
}
393
486
ldk_events:: Event :: PaymentFailed { payment_hash, .. } => {
@@ -403,10 +496,10 @@ impl ldk_events::EventHandler for LdkLiteEventHandler {
403
496
payment. status = PaymentStatus :: Failed ;
404
497
}
405
498
self . event_queue
406
- . add_event ( LdkLiteEvent :: PaymentFailed {
499
+ . add_event ( LdkLiteEvent :: PaymentFailed ( PaymentFailedEvent {
407
500
payment_hash : * payment_hash,
408
501
inner : event. clone ( ) ,
409
- } )
502
+ } ) )
410
503
. unwrap ( ) ;
411
504
}
412
505
@@ -518,10 +611,10 @@ impl ldk_events::EventHandler for LdkLiteEventHandler {
518
611
reason
519
612
) ;
520
613
self . event_queue
521
- . add_event ( LdkLiteEvent :: ChannelClosed {
614
+ . add_event ( LdkLiteEvent :: ChannelClosed ( ChannelClosedEvent {
522
615
channel_id : * channel_id,
523
616
inner : event. clone ( ) ,
524
- } )
617
+ } ) )
525
618
. unwrap ( ) ;
526
619
}
527
620
ldk_events:: Event :: DiscardFunding { .. } => { }
0 commit comments