Skip to content

Commit 0f97f11

Browse files
author
Antoine Riard
committed
Implement Writeable/Readable for Option<T>
1 parent 25af9b7 commit 0f97f11

File tree

2 files changed

+28
-35
lines changed

2 files changed

+28
-35
lines changed

src/ln/channelmanager.rs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2612,12 +2612,7 @@ const MIN_SERIALIZATION_VERSION: u8 = 1;
26122612

26132613
impl Writeable for PendingForwardHTLCInfo {
26142614
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), ::std::io::Error> {
2615-
if let &Some(ref onion) = &self.onion_packet {
2616-
1u8.write(writer)?;
2617-
onion.write(writer)?;
2618-
} else {
2619-
0u8.write(writer)?;
2620-
}
2615+
self.onion_packet.write(writer)?;
26212616
self.incoming_shared_secret.write(writer)?;
26222617
self.payment_hash.write(writer)?;
26232618
self.short_channel_id.write(writer)?;
@@ -2629,13 +2624,8 @@ impl Writeable for PendingForwardHTLCInfo {
26292624

26302625
impl<R: ::std::io::Read> Readable<R> for PendingForwardHTLCInfo {
26312626
fn read(reader: &mut R) -> Result<PendingForwardHTLCInfo, DecodeError> {
2632-
let onion_packet = match <u8 as Readable<R>>::read(reader)? {
2633-
0 => None,
2634-
1 => Some(msgs::OnionPacket::read(reader)?),
2635-
_ => return Err(DecodeError::InvalidValue),
2636-
};
26372627
Ok(PendingForwardHTLCInfo {
2638-
onion_packet,
2628+
onion_packet: Readable::read(reader)?,
26392629
incoming_shared_secret: Readable::read(reader)?,
26402630
payment_hash: Readable::read(reader)?,
26412631
short_channel_id: Readable::read(reader)?,

src/util/ser.rs

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -306,29 +306,6 @@ impl<R: Read> Readable<R> for Script {
306306
}
307307
}
308308

309-
impl Writeable for Option<Script> {
310-
fn write<W: Writer>(&self, w: &mut W) -> Result<(), ::std::io::Error> {
311-
if let &Some(ref script) = self {
312-
script.write(w)?;
313-
}
314-
Ok(())
315-
}
316-
}
317-
318-
impl<R: Read> Readable<R> for Option<Script> {
319-
fn read(r: &mut R) -> Result<Self, DecodeError> {
320-
match <u16 as Readable<R>>::read(r) {
321-
Ok(len) => {
322-
let mut buf = vec![0; len as usize];
323-
r.read_exact(&mut buf)?;
324-
Ok(Some(Script::from(buf)))
325-
},
326-
Err(DecodeError::ShortRead) => Ok(None),
327-
Err(e) => Err(e)
328-
}
329-
}
330-
}
331-
332309
impl Writeable for PublicKey {
333310
fn write<W: Writer>(&self, w: &mut W) -> Result<(), ::std::io::Error> {
334311
self.serialize().write(w)
@@ -417,3 +394,29 @@ impl<R: Read> Readable<R> for PaymentHash {
417394
Ok(PaymentHash(buf))
418395
}
419396
}
397+
398+
impl<T: Writeable> Writeable for Option<T> {
399+
fn write<W: Writer>(&self, w: &mut W) -> Result<(), ::std::io::Error> {
400+
match &self {
401+
&None => 0u8.write(w)?,
402+
&Some(ref data) => {
403+
1u8.write(w)?;
404+
data.write(w)?;
405+
}
406+
}
407+
Ok(())
408+
}
409+
}
410+
411+
impl<R, T> Readable<R> for Option<T>
412+
where R: Read,
413+
T: Readable<R>
414+
{
415+
fn read(r: &mut R) -> Result<Self, DecodeError> {
416+
match <u8 as Readable<R>>::read(r)? {
417+
0 => Ok(None),
418+
1 => Ok(Some(Readable::read(r)?)),
419+
_ => return Err(DecodeError::InvalidValue),
420+
}
421+
}
422+
}

0 commit comments

Comments
 (0)