Skip to content

Commit 8e90841

Browse files
authored
Merge pull request #3579 from arik-so/length_readable_serde
Implement Readable for LengthReadable
2 parents 3e318ed + 9dbe358 commit 8e90841

File tree

5 files changed

+24
-14
lines changed

5 files changed

+24
-14
lines changed

lightning/src/ln/msgs.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1958,7 +1958,7 @@ impl Writeable for TrampolineOnionPacket {
19581958
}
19591959

19601960
impl LengthReadable for TrampolineOnionPacket {
1961-
fn read<R: LengthRead>(r: &mut R) -> Result<Self, DecodeError> {
1961+
fn read_from_fixed_length_buffer<R: LengthRead>(r: &mut R) -> Result<Self, DecodeError> {
19621962
let version = Readable::read(r)?;
19631963
let public_key = Readable::read(r)?;
19641964

@@ -2684,7 +2684,7 @@ impl Readable for OnionMessage {
26842684
let len: u16 = Readable::read(r)?;
26852685
let mut packet_reader = FixedLengthReader::new(r, len as u64);
26862686
let onion_routing_packet: onion_message::packet::Packet =
2687-
<onion_message::packet::Packet as LengthReadable>::read(&mut packet_reader)?;
2687+
<onion_message::packet::Packet as LengthReadable>::read_from_fixed_length_buffer(&mut packet_reader)?;
26882688
Ok(Self {
26892689
blinding_point,
26902690
onion_routing_packet,
@@ -4708,7 +4708,7 @@ mod tests {
47084708
{ // verify that a codec round trip works
47094709
let mut reader = Cursor::new(&encoded_trampoline_packet);
47104710
let mut trampoline_packet_reader = FixedLengthReader::new(&mut reader, encoded_trampoline_packet.len() as u64);
4711-
let decoded_trampoline_packet: TrampolineOnionPacket = <TrampolineOnionPacket as LengthReadable>::read(&mut trampoline_packet_reader).unwrap();
4711+
let decoded_trampoline_packet: TrampolineOnionPacket = <TrampolineOnionPacket as LengthReadable>::read_from_fixed_length_buffer(&mut trampoline_packet_reader).unwrap();
47124712
assert_eq!(decoded_trampoline_packet.encode(), encoded_trampoline_packet);
47134713
}
47144714

lightning/src/onion_message/functional_tests.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -971,7 +971,7 @@ fn spec_test_vector() {
971971
let mut reader = io::Cursor::new(sender_to_alice_packet_bytes);
972972
let mut packet_reader = FixedLengthReader::new(&mut reader, sender_to_alice_packet_bytes_len);
973973
let sender_to_alice_packet: Packet =
974-
<Packet as LengthReadable>::read(&mut packet_reader).unwrap();
974+
<Packet as LengthReadable>::read_from_fixed_length_buffer(&mut packet_reader).unwrap();
975975
let secp_ctx = Secp256k1::new();
976976

977977
let blinding_key_hex = "6363636363636363636363636363636363636363636363636363636363636363";

lightning/src/onion_message/packet.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ impl Writeable for Packet {
8484
}
8585

8686
impl LengthReadable for Packet {
87-
fn read<R: LengthRead>(r: &mut R) -> Result<Self, DecodeError> {
87+
fn read_from_fixed_length_buffer<R: LengthRead>(r: &mut R) -> Result<Self, DecodeError> {
8888
const READ_BUFFER_SIZE: usize = 4096;
8989

9090
let version = Readable::read(r)?;

lightning/src/util/ser.rs

+16-6
Original file line numberDiff line numberDiff line change
@@ -344,8 +344,8 @@ where
344344
fn read<R: Read>(reader: &mut R, params: P) -> Result<Self, DecodeError>;
345345
}
346346

347-
/// A [`std::io::Read`] that also provides the total bytes available to be read.
348-
pub(crate) trait LengthRead: Read {
347+
/// A [`io::Read`] that also provides the total bytes available to be read.
348+
pub trait LengthRead: Read {
349349
/// The total number of bytes available to be read.
350350
fn total_bytes(&self) -> u64;
351351
}
@@ -361,14 +361,24 @@ where
361361
fn read<R: LengthRead>(reader: &mut R, params: P) -> Result<Self, DecodeError>;
362362
}
363363

364-
/// A trait that various higher-level LDK types implement allowing them to be read in
365-
/// from a [`Read`], requiring the implementer to provide the total length of the read.
366-
pub(crate) trait LengthReadable
364+
/// A trait that allows the implementer to be read in from a [`LengthRead`], requiring
365+
/// the reader to provide the total length of the read.
366+
///
367+
/// Any type that implements [`Readable`] also automatically has a [`LengthReadable`]
368+
/// implementation, but some types, most notably onion packets, only implement [`LengthReadable`].
369+
pub trait LengthReadable
367370
where
368371
Self: Sized,
369372
{
370373
/// Reads a `Self` in from the given [`LengthRead`].
371-
fn read<R: LengthRead>(reader: &mut R) -> Result<Self, DecodeError>;
374+
fn read_from_fixed_length_buffer<R: LengthRead>(reader: &mut R) -> Result<Self, DecodeError>;
375+
}
376+
377+
impl<T: Readable> LengthReadable for T {
378+
#[inline]
379+
fn read_from_fixed_length_buffer<R: LengthRead>(reader: &mut R) -> Result<T, DecodeError> {
380+
Readable::read(reader)
381+
}
372382
}
373383

374384
/// A trait that various LDK types implement allowing them to (maybe) be read in from a [`Read`].

lightning/src/util/ser_macros.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ macro_rules! _decode_tlv {
382382
($outer_reader: expr, $reader: expr, $field: ident, (static_value, $value: expr)) => {{
383383
}};
384384
($outer_reader: expr, $reader: expr, $field: ident, required) => {{
385-
$field = $crate::util::ser::Readable::read(&mut $reader)?;
385+
$field = $crate::util::ser::LengthReadable::read_from_fixed_length_buffer(&mut $reader)?;
386386
}};
387387
($outer_reader: expr, $reader: expr, $field: ident, (required: $trait: ident $(, $read_arg: expr)?)) => {{
388388
$field = $trait::read(&mut $reader $(, $read_arg)*)?;
@@ -392,7 +392,7 @@ macro_rules! _decode_tlv {
392392
$field = f.0;
393393
}};
394394
($outer_reader: expr, $reader: expr, $field: ident, option) => {{
395-
$field = Some($crate::util::ser::Readable::read(&mut $reader)?);
395+
$field = Some($crate::util::ser::LengthReadable::read_from_fixed_length_buffer(&mut $reader)?);
396396
}};
397397
($outer_reader: expr, $reader: expr, $field: ident, (option, explicit_type: $fieldty: ty)) => {{
398398
let _field: &Option<$fieldty> = &$field;
@@ -453,7 +453,7 @@ macro_rules! _decode_tlv {
453453
}};
454454
($outer_reader: expr, $reader: expr, $field: ident, (option, encoding: ($fieldty: ty, $encoding: ident))) => {{
455455
$field = {
456-
let field: $encoding<$fieldty> = ser::Readable::read(&mut $reader)?;
456+
let field: $encoding<$fieldty> = ser::LengthReadable::read_from_fixed_length_buffer(&mut $reader)?;
457457
Some(field.0)
458458
};
459459
}};

0 commit comments

Comments
 (0)