Skip to content

Commit fdef833

Browse files
committed
f Use individual event structs
1 parent 77940d9 commit fdef833

File tree

1 file changed

+174
-81
lines changed

1 file changed

+174
-81
lines changed

src/event.rs

+174-81
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
//! The events emitted by [`LdkLite`] live here.
2+
//!
3+
//! [`LdkLite`]: [`crate::LdkLite`]
4+
15
use 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.
2832
pub(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)]
3341
pub 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

7461
impl 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 {
11484
impl 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+
154247
pub(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

Comments
 (0)