Skip to content

Commit d0da097

Browse files
committed
f - define try_from_tlv_stream_bytes
1 parent ff368a4 commit d0da097

File tree

3 files changed

+33
-23
lines changed

3 files changed

+33
-23
lines changed

lightning/src/offers/invoice_request.rs

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -342,15 +342,8 @@ impl TryFrom<Vec<u8>> for InvoiceRequest {
342342
type Error = ParseError;
343343

344344
fn try_from(bytes: Vec<u8>) -> Result<Self, Self::Error> {
345-
let mut cursor = io::Cursor::new(bytes);
346-
let tlv_stream: FullInvoiceRequestTlvStream = SeekReadable::read(&mut cursor)?;
347-
348-
if cursor.position() < cursor.get_ref().len() as u64 {
349-
return Err(ParseError::Decode(DecodeError::InvalidValue));
350-
}
351-
352-
let bytes = cursor.into_inner();
353-
InvoiceRequest::try_from((bytes, tlv_stream))
345+
let parsed_invoice_request = ParsedInvoiceRequest::try_from(bytes)?;
346+
InvoiceRequest::try_from(parsed_invoice_request)
354347
}
355348
}
356349

@@ -363,7 +356,9 @@ tlv_stream!(InvoiceRequestTlvStream, InvoiceRequestTlvStreamRef, 80..160, {
363356
(89, payer_note: (String, WithoutLength)),
364357
});
365358

366-
type ParsedInvoiceRequest = (Vec<u8>, FullInvoiceRequestTlvStream);
359+
try_from_tlv_stream_bytes!(FullInvoiceRequestTlvStream, ParsedInvoiceRequest);
360+
361+
struct ParsedInvoiceRequest(Vec<u8>, FullInvoiceRequestTlvStream);
367362

368363
type FullInvoiceRequestTlvStream =
369364
(PayerTlvStream, OfferTlvStream, InvoiceRequestTlvStream, SignatureTlvStream);
@@ -391,7 +386,7 @@ impl TryFrom<ParsedInvoiceRequest> for InvoiceRequest {
391386
type Error = ParseError;
392387

393388
fn try_from(invoice_request: ParsedInvoiceRequest) -> Result<Self, Self::Error> {
394-
let (bytes, tlv_stream) = invoice_request;
389+
let ParsedInvoiceRequest(bytes, tlv_stream) = invoice_request;
395390
let (
396391
payer_tlv_stream, offer_tlv_stream, invoice_request_tlv_stream,
397392
SignatureTlvStream { signature },

lightning/src/offers/offer.rs

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ use core::str::FromStr;
7777
use core::time::Duration;
7878
use io;
7979
use ln::features::OfferFeatures;
80-
use ln::msgs::{DecodeError, MAX_VALUE_MSAT};
80+
use ln::msgs::MAX_VALUE_MSAT;
8181
use offers::invoice_request::InvoiceRequestBuilder;
8282
use offers::parse::{Bech32Encode, ParseError, SemanticError};
8383
use onion_message::BlindedPath;
@@ -499,15 +499,8 @@ impl TryFrom<Vec<u8>> for Offer {
499499
type Error = ParseError;
500500

501501
fn try_from(bytes: Vec<u8>) -> Result<Self, Self::Error> {
502-
let mut cursor = io::Cursor::new(bytes);
503-
let tlv_stream: OfferTlvStream = SeekReadable::read(&mut cursor)?;
504-
505-
if cursor.position() < cursor.get_ref().len() as u64 {
506-
return Err(ParseError::Decode(DecodeError::InvalidValue));
507-
}
508-
509-
let bytes = cursor.into_inner();
510-
Offer::try_from((bytes, tlv_stream))
502+
let parsed_offer = ParsedOffer::try_from(bytes)?;
503+
Offer::try_from(parsed_offer)
511504
}
512505
}
513506

@@ -557,11 +550,13 @@ tlv_stream!(OfferTlvStream, OfferTlvStreamRef, 1..80, {
557550
(24, node_id: PublicKey),
558551
});
559552

553+
try_from_tlv_stream_bytes!(OfferTlvStream, ParsedOffer);
554+
560555
impl Bech32Encode for Offer {
561556
const BECH32_HRP: &'static str = "lno";
562557
}
563558

564-
type ParsedOffer = (Vec<u8>, OfferTlvStream);
559+
struct ParsedOffer(Vec<u8>, OfferTlvStream);
565560

566561
impl FromStr for Offer {
567562
type Err = ParseError;
@@ -575,7 +570,7 @@ impl TryFrom<ParsedOffer> for Offer {
575570
type Error = ParseError;
576571

577572
fn try_from(offer: ParsedOffer) -> Result<Self, Self::Error> {
578-
let (bytes, tlv_stream) = offer;
573+
let ParsedOffer(bytes, tlv_stream) = offer;
579574
let contents = OfferContents::try_from(tlv_stream)?;
580575
Ok(Offer { bytes, contents })
581576
}

lightning/src/util/ser_macros.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -534,6 +534,26 @@ macro_rules! tlv_record_ref_type {
534534
($type:ty) => { &'a $type };
535535
}
536536

537+
macro_rules! try_from_tlv_stream_bytes {
538+
($tlv_stream:ty, $parsed_message:ident) => {
539+
impl TryFrom<Vec<u8>> for $parsed_message {
540+
type Error = ::ln::msgs::DecodeError;
541+
542+
fn try_from(bytes: Vec<u8>) -> Result<Self, Self::Error> {
543+
let mut cursor = io::Cursor::new(bytes);
544+
let tlv_stream: $tlv_stream = SeekReadable::read(&mut cursor)?;
545+
546+
if cursor.position() < cursor.get_ref().len() as u64 {
547+
return Err(::ln::msgs::DecodeError::InvalidValue);
548+
}
549+
550+
let bytes = cursor.into_inner();
551+
Ok(Self(bytes, tlv_stream))
552+
}
553+
}
554+
};
555+
}
556+
537557
macro_rules! _impl_writeable_tlv_based_enum_common {
538558
($st: ident, $(($variant_id: expr, $variant_name: ident) =>
539559
{$(($type: expr, $field: ident, $fieldty: tt)),* $(,)*}

0 commit comments

Comments
 (0)