1+ //! The events emitted by [`LdkLite`] live here.
2+ //!
3+ //! [`LdkLite`]: [`crate::LdkLite`]
4+
15use crate :: {
26 hex_utils, ChannelManager , Error , FilesystemPersister , LdkLiteChainAccess , LdkLiteConfig ,
37 NetworkGraph , PaymentInfo , PaymentInfoStorage , PaymentStatus ,
@@ -27,79 +31,45 @@ use std::time::Duration;
2731/// The event queue will be persisted under this key.
2832pub ( crate ) const EVENTS_PERSISTENCE_KEY : & str = "events" ;
2933
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`]
3240#[ derive( Debug , Clone ) ]
3341pub enum LdkLiteEvent {
3442 /// 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 ) ,
4144 /// 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 ) ,
4846 /// 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 ) ,
5748 // TODO: Implement after a corresponding LDK event is added.
58- //ChannelOpened {
59- //},
49+ //ChannelOpened(ChannelOpenedEvent),
6050 /// 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 ) ,
6752 // 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 ;
7259}
7360
7461impl Readable for LdkLiteEvent {
7562 fn read < R : lightning:: io:: Read > (
7663 reader : & mut R ,
7764 ) -> Result < Self , lightning:: ln:: msgs:: DecodeError > {
7865 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 => {
9670 // TODO ChannelOpened
9771 //}
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) ?) ) ,
10373 //5u8 => {
10474 // TODO OnChainPaymentSent
10575 //}
@@ -114,32 +84,23 @@ impl Readable for LdkLiteEvent {
11484impl Writeable for LdkLiteEvent {
11585 fn write < W : Writer > ( & self , writer : & mut W ) -> Result < ( ) , lightning:: io:: Error > {
11686 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) ?;
12189 Ok ( ( ) )
12290 }
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) ?;
12793 Ok ( ( ) )
12894 }
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) ?;
13497 Ok ( ( ) )
13598 }
13699 //Self::ChannelOpened { .. } => {
137100 //TODO
138101 //}
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) ?;
143104 Ok ( ( ) )
144105 } //Self::OnChainPaymentSent { .. } => {
145106 //TODO
@@ -151,6 +112,138 @@ impl Writeable for LdkLiteEvent {
151112 }
152113}
153114
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+
154247pub ( crate ) struct LdkLiteEventQueue < K : KVStorePersister > {
155248 queue : Mutex < EventQueueSerWrapper > ,
156249 notifier : Condvar ,
@@ -315,11 +408,11 @@ impl ldk_events::EventHandler for LdkLiteEventHandler {
315408 } ;
316409 self . channel_manager . claim_funds ( payment_preimage. unwrap ( ) ) ;
317410 self . event_queue
318- . add_event ( LdkLiteEvent :: PaymentReceived {
411+ . add_event ( LdkLiteEvent :: PaymentReceived ( PaymentReceivedEvent {
319412 payment_hash : * payment_hash,
320413 amount_msat : * amount_msat,
321414 inner : event. clone ( ) ,
322- } )
415+ } ) )
323416 . unwrap ( ) ;
324417 }
325418 ldk_events:: Event :: PaymentClaimed { payment_hash, purpose, amount_msat } => {
@@ -384,10 +477,10 @@ impl ldk_events::EventHandler for LdkLiteEventHandler {
384477 }
385478 }
386479 self . event_queue
387- . add_event ( LdkLiteEvent :: PaymentSuccessful {
480+ . add_event ( LdkLiteEvent :: PaymentSuccessful ( PaymentSuccessfulEvent {
388481 payment_hash : * payment_hash,
389482 inner : event. clone ( ) ,
390- } )
483+ } ) )
391484 . unwrap ( ) ;
392485 }
393486 ldk_events:: Event :: PaymentFailed { payment_hash, .. } => {
@@ -403,10 +496,10 @@ impl ldk_events::EventHandler for LdkLiteEventHandler {
403496 payment. status = PaymentStatus :: Failed ;
404497 }
405498 self . event_queue
406- . add_event ( LdkLiteEvent :: PaymentFailed {
499+ . add_event ( LdkLiteEvent :: PaymentFailed ( PaymentFailedEvent {
407500 payment_hash : * payment_hash,
408501 inner : event. clone ( ) ,
409- } )
502+ } ) )
410503 . unwrap ( ) ;
411504 }
412505
@@ -518,10 +611,10 @@ impl ldk_events::EventHandler for LdkLiteEventHandler {
518611 reason
519612 ) ;
520613 self . event_queue
521- . add_event ( LdkLiteEvent :: ChannelClosed {
614+ . add_event ( LdkLiteEvent :: ChannelClosed ( ChannelClosedEvent {
522615 channel_id : * channel_id,
523616 inner : event. clone ( ) ,
524- } )
617+ } ) )
525618 . unwrap ( ) ;
526619 }
527620 ldk_events:: Event :: DiscardFunding { .. } => { }
0 commit comments