Skip to content

Commit fb818e0

Browse files
committed
Drop Seek and SeekFrom usage.
In lieu of using `Seek` and `SeekFrom`, we will instead rely exclusively on the `io::Cursor` type.
1 parent d1767cd commit fb818e0

File tree

7 files changed

+45
-45
lines changed

7 files changed

+45
-45
lines changed

lightning/src/offers/invoice.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ use crate::offers::parse::{Bolt12ParseError, Bolt12SemanticError, ParsedMessage}
125125
use crate::offers::payer::{PAYER_METADATA_TYPE, PayerTlvStream, PayerTlvStreamRef};
126126
use crate::offers::refund::{IV_BYTES_WITH_METADATA as REFUND_IV_BYTES_WITH_METADATA, IV_BYTES_WITHOUT_METADATA as REFUND_IV_BYTES_WITHOUT_METADATA, Refund, RefundContents};
127127
use crate::offers::signer::{Metadata, self};
128-
use crate::util::ser::{HighZeroBytesDroppedBigSize, Iterable, Readable, SeekReadable, WithoutLength, Writeable, Writer};
128+
use crate::util::ser::{CursorReadable, HighZeroBytesDroppedBigSize, Iterable, Readable, WithoutLength, Writeable, Writer};
129129
use crate::util::string::PrintableString;
130130

131131
#[allow(unused_imports)]
@@ -1266,13 +1266,13 @@ type FullInvoiceTlvStreamRef<'a> = (
12661266
SignatureTlvStreamRef<'a>,
12671267
);
12681268

1269-
impl SeekReadable for FullInvoiceTlvStream {
1270-
fn read<R: io::Read + io::Seek>(r: &mut R) -> Result<Self, DecodeError> {
1271-
let payer = SeekReadable::read(r)?;
1272-
let offer = SeekReadable::read(r)?;
1273-
let invoice_request = SeekReadable::read(r)?;
1274-
let invoice = SeekReadable::read(r)?;
1275-
let signature = SeekReadable::read(r)?;
1269+
impl CursorReadable for FullInvoiceTlvStream {
1270+
fn read<R: AsRef<[u8]>>(r: &mut io::Cursor<R>) -> Result<Self, DecodeError> {
1271+
let payer = CursorReadable::read(r)?;
1272+
let offer = CursorReadable::read(r)?;
1273+
let invoice_request = CursorReadable::read(r)?;
1274+
let invoice = CursorReadable::read(r)?;
1275+
let signature = CursorReadable::read(r)?;
12761276

12771277
Ok((payer, offer, invoice_request, invoice, signature))
12781278
}
@@ -1288,12 +1288,12 @@ type PartialInvoiceTlvStreamRef<'a> = (
12881288
InvoiceTlvStreamRef<'a>,
12891289
);
12901290

1291-
impl SeekReadable for PartialInvoiceTlvStream {
1292-
fn read<R: io::Read + io::Seek>(r: &mut R) -> Result<Self, DecodeError> {
1293-
let payer = SeekReadable::read(r)?;
1294-
let offer = SeekReadable::read(r)?;
1295-
let invoice_request = SeekReadable::read(r)?;
1296-
let invoice = SeekReadable::read(r)?;
1291+
impl CursorReadable for PartialInvoiceTlvStream {
1292+
fn read<R: AsRef<[u8]>>(r: &mut io::Cursor<R>) -> Result<Self, DecodeError> {
1293+
let payer = CursorReadable::read(r)?;
1294+
let offer = CursorReadable::read(r)?;
1295+
let invoice_request = CursorReadable::read(r)?;
1296+
let invoice = CursorReadable::read(r)?;
12971297

12981298
Ok((payer, offer, invoice_request, invoice))
12991299
}

lightning/src/offers/invoice_request.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ use crate::offers::offer::{Offer, OfferContents, OfferId, OfferTlvStream, OfferT
7575
use crate::offers::parse::{Bolt12ParseError, ParsedMessage, Bolt12SemanticError};
7676
use crate::offers::payer::{PayerContents, PayerTlvStream, PayerTlvStreamRef};
7777
use crate::offers::signer::{Metadata, MetadataMaterial};
78-
use crate::util::ser::{HighZeroBytesDroppedBigSize, Readable, SeekReadable, WithoutLength, Writeable, Writer};
78+
use crate::util::ser::{CursorReadable, HighZeroBytesDroppedBigSize, Readable, WithoutLength, Writeable, Writer};
7979
use crate::util::string::{PrintableString, UntrustedString};
8080

8181
#[cfg(not(c_bindings))]
@@ -1070,12 +1070,12 @@ type FullInvoiceRequestTlvStreamRef<'a> = (
10701070
SignatureTlvStreamRef<'a>,
10711071
);
10721072

1073-
impl SeekReadable for FullInvoiceRequestTlvStream {
1074-
fn read<R: io::Read + io::Seek>(r: &mut R) -> Result<Self, DecodeError> {
1075-
let payer = SeekReadable::read(r)?;
1076-
let offer = SeekReadable::read(r)?;
1077-
let invoice_request = SeekReadable::read(r)?;
1078-
let signature = SeekReadable::read(r)?;
1073+
impl CursorReadable for FullInvoiceRequestTlvStream {
1074+
fn read<R: AsRef<[u8]>>(r: &mut io::Cursor<R>) -> Result<Self, DecodeError> {
1075+
let payer = CursorReadable::read(r)?;
1076+
let offer = CursorReadable::read(r)?;
1077+
let invoice_request = CursorReadable::read(r)?;
1078+
let signature = CursorReadable::read(r)?;
10791079

10801080
Ok((payer, offer, invoice_request, signature))
10811081
}

lightning/src/offers/parse.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
use bitcoin::secp256k1;
1313
use crate::io;
1414
use crate::ln::msgs::DecodeError;
15-
use crate::util::ser::SeekReadable;
15+
use crate::util::ser::CursorReadable;
1616

1717
#[allow(unused_imports)]
1818
use crate::prelude::*;
@@ -91,17 +91,17 @@ mod sealed {
9191

9292
/// A wrapper for reading a message as a TLV stream `T` from a byte sequence, while still
9393
/// maintaining ownership of the bytes for later use.
94-
pub(super) struct ParsedMessage<T: SeekReadable> {
94+
pub(super) struct ParsedMessage<T: CursorReadable> {
9595
pub bytes: Vec<u8>,
9696
pub tlv_stream: T,
9797
}
9898

99-
impl<T: SeekReadable> TryFrom<Vec<u8>> for ParsedMessage<T> {
99+
impl<T: CursorReadable> TryFrom<Vec<u8>> for ParsedMessage<T> {
100100
type Error = DecodeError;
101101

102102
fn try_from(bytes: Vec<u8>) -> Result<Self, Self::Error> {
103103
let mut cursor = io::Cursor::new(bytes);
104-
let tlv_stream: T = SeekReadable::read(&mut cursor)?;
104+
let tlv_stream: T = CursorReadable::read(&mut cursor)?;
105105

106106
// Ensure that there are no more TLV records left to parse.
107107
if cursor.position() < cursor.get_ref().len() as u64 {

lightning/src/offers/refund.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ use crate::offers::offer::{OfferTlvStream, OfferTlvStreamRef};
104104
use crate::offers::parse::{Bech32Encode, Bolt12ParseError, Bolt12SemanticError, ParsedMessage};
105105
use crate::offers::payer::{PayerContents, PayerTlvStream, PayerTlvStreamRef};
106106
use crate::offers::signer::{Metadata, MetadataMaterial, self};
107-
use crate::util::ser::{SeekReadable, Readable, WithoutLength, Writeable, Writer};
107+
use crate::util::ser::{CursorReadable, Readable, WithoutLength, Writeable, Writer};
108108
use crate::util::string::PrintableString;
109109

110110
#[cfg(not(c_bindings))]
@@ -801,11 +801,11 @@ type RefundTlvStreamRef<'a> = (
801801
InvoiceRequestTlvStreamRef<'a>,
802802
);
803803

804-
impl SeekReadable for RefundTlvStream {
805-
fn read<R: io::Read + io::Seek>(r: &mut R) -> Result<Self, DecodeError> {
806-
let payer = SeekReadable::read(r)?;
807-
let offer = SeekReadable::read(r)?;
808-
let invoice_request = SeekReadable::read(r)?;
804+
impl CursorReadable for RefundTlvStream {
805+
fn read<R: AsRef<[u8]>>(r: &mut io::Cursor<R>) -> Result<Self, DecodeError> {
806+
let payer = CursorReadable::read(r)?;
807+
let offer = CursorReadable::read(r)?;
808+
let invoice_request = CursorReadable::read(r)?;
809809

810810
Ok((payer, offer, invoice_request))
811811
}

lightning/src/offers/static_invoice.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ use crate::offers::offer::{
2727
Amount, Offer, OfferContents, OfferTlvStream, OfferTlvStreamRef, Quantity,
2828
};
2929
use crate::offers::parse::{Bolt12ParseError, Bolt12SemanticError, ParsedMessage};
30-
use crate::util::ser::{Iterable, SeekReadable, WithoutLength, Writeable, Writer};
30+
use crate::util::ser::{CursorReadable, Iterable, WithoutLength, Writeable, Writer};
3131
use crate::util::string::PrintableString;
3232
use bitcoin::address::Address;
3333
use bitcoin::constants::ChainHash;
@@ -457,11 +457,11 @@ impl TryFrom<Vec<u8>> for StaticInvoice {
457457

458458
type FullInvoiceTlvStream = (OfferTlvStream, InvoiceTlvStream, SignatureTlvStream);
459459

460-
impl SeekReadable for FullInvoiceTlvStream {
461-
fn read<R: io::Read + io::Seek>(r: &mut R) -> Result<Self, DecodeError> {
462-
let offer = SeekReadable::read(r)?;
463-
let invoice = SeekReadable::read(r)?;
464-
let signature = SeekReadable::read(r)?;
460+
impl CursorReadable for FullInvoiceTlvStream {
461+
fn read<R: AsRef<[u8]>>(r: &mut io::Cursor<R>) -> Result<Self, DecodeError> {
462+
let offer = CursorReadable::read(r)?;
463+
let invoice = CursorReadable::read(r)?;
464+
let signature = CursorReadable::read(r)?;
465465

466466
Ok((offer, invoice, signature))
467467
}

lightning/src/util/ser.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
//! [`ChannelMonitor`]: crate::chain::channelmonitor::ChannelMonitor
1515
1616
use crate::prelude::*;
17-
use crate::io::{self, Read, Seek, Write};
17+
use crate::io::{self, Read, Write};
1818
use crate::io_extras::{copy, sink};
1919
use core::hash::Hash;
2020
use crate::sync::{Mutex, RwLock};
@@ -247,10 +247,10 @@ pub trait Readable
247247
}
248248

249249
/// A trait that various LDK types implement allowing them to be read in from a
250-
/// [`Read`]` + `[`Seek`].
251-
pub(crate) trait SeekReadable where Self: Sized {
250+
/// [`io::Cursor`].
251+
pub(crate) trait CursorReadable where Self: Sized {
252252
/// Reads a `Self` in from the given [`Read`].
253-
fn read<R: Read + Seek>(reader: &mut R) -> Result<Self, DecodeError>;
253+
fn read<R: AsRef<[u8]>>(reader: &mut io::Cursor<R>) -> Result<Self, DecodeError>;
254254
}
255255

256256
/// A trait that various higher-level LDK types implement allowing them to be read in

lightning/src/util/ser_macros.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -952,13 +952,13 @@ macro_rules! tlv_stream {
952952
}
953953
}
954954

955-
impl $crate::util::ser::SeekReadable for $name {
956-
fn read<R: $crate::io::Read + $crate::io::Seek>(reader: &mut R) -> Result<Self, $crate::ln::msgs::DecodeError> {
955+
impl $crate::util::ser::CursorReadable for $name {
956+
fn read<R: AsRef<[u8]>>(reader: &mut crate::io::Cursor<R>) -> Result<Self, $crate::ln::msgs::DecodeError> {
957957
$(
958958
_init_tlv_field_var!($field, option);
959959
)*
960-
let rewind = |cursor: &mut R, offset: usize| {
961-
cursor.seek($crate::io::SeekFrom::Current(-(offset as i64))).expect("");
960+
let rewind = |cursor: &mut crate::io::Cursor<R>, offset: usize| {
961+
cursor.set_position(cursor.position().checked_sub(offset as u64).expect("Cannot rewind past 0."));
962962
};
963963
_decode_tlv_stream_range!(reader, $range, rewind, {
964964
$(($type, $field, (option, encoding: $fieldty))),*

0 commit comments

Comments
 (0)