Skip to content

Commit 68313da

Browse files
committed
Add generic serialization implementations for Boxs and 3-tuples
These are used in the next commit(s).
1 parent b385a40 commit 68313da

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

lightning/src/util/ser.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -698,6 +698,18 @@ impl Readable for PaymentSecret {
698698
}
699699
}
700700

701+
impl<T: Writeable> Writeable for Box<T> {
702+
fn write<W: Writer>(&self, w: &mut W) -> Result<(), ::std::io::Error> {
703+
T::write(&**self, w)
704+
}
705+
}
706+
707+
impl<T: Readable> Readable for Box<T> {
708+
fn read<R: Read>(r: &mut R) -> Result<Self, DecodeError> {
709+
Ok(Box::new(Readable::read(r)?))
710+
}
711+
}
712+
701713
impl<T: Writeable> Writeable for Option<T> {
702714
fn write<W: Writer>(&self, w: &mut W) -> Result<(), ::std::io::Error> {
703715
match *self {
@@ -824,3 +836,19 @@ impl<A: Writeable, B: Writeable> Writeable for (A, B) {
824836
self.1.write(w)
825837
}
826838
}
839+
840+
impl<A: Readable, B: Readable, C: Readable> Readable for (A, B, C) {
841+
fn read<R: Read>(r: &mut R) -> Result<Self, DecodeError> {
842+
let a: A = Readable::read(r)?;
843+
let b: B = Readable::read(r)?;
844+
let c: C = Readable::read(r)?;
845+
Ok((a, b, c))
846+
}
847+
}
848+
impl<A: Writeable, B: Writeable, C: Writeable> Writeable for (A, B, C) {
849+
fn write<W: Writer>(&self, w: &mut W) -> Result<(), ::std::io::Error> {
850+
self.0.write(w)?;
851+
self.1.write(w)?;
852+
self.2.write(w)
853+
}
854+
}

lightning/src/util/ser_macros.rs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ macro_rules! impl_writeable_tlv_based_enum {
523523
#[cfg(test)]
524524
mod tests {
525525
use prelude::*;
526-
use std::io::{Cursor, Read};
526+
use std::io::Cursor;
527527
use ln::msgs::DecodeError;
528528
use util::ser::{Readable, Writeable, HighZeroBytesDroppedVarInt, VecWriter};
529529
use bitcoin::secp256k1::PublicKey;
@@ -593,13 +593,6 @@ mod tests {
593593
(0xdeadbeef1badbeef, 0x1bad1dea, Some(0x01020304)));
594594
}
595595

596-
impl Readable for (PublicKey, u64, u64) {
597-
#[inline]
598-
fn read<R: Read>(reader: &mut R) -> Result<(PublicKey, u64, u64), DecodeError> {
599-
Ok((Readable::read(reader)?, Readable::read(reader)?, Readable::read(reader)?))
600-
}
601-
}
602-
603596
// BOLT TLV test cases
604597
fn tlv_reader_n1(s: &[u8]) -> Result<(Option<HighZeroBytesDroppedVarInt<u64>>, Option<u64>, Option<(PublicKey, u64, u64)>, Option<u16>), DecodeError> {
605598
let mut s = Cursor::new(s);

0 commit comments

Comments
 (0)