Skip to content

Commit 19f3053

Browse files
committed
f - define try_from_tlv_stream_bytes
1 parent d922b7a commit 19f3053

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
@@ -339,15 +339,8 @@ impl TryFrom<Vec<u8>> for InvoiceRequest {
339339
type Error = ParseError;
340340

341341
fn try_from(bytes: Vec<u8>) -> Result<Self, Self::Error> {
342-
let mut cursor = io::Cursor::new(bytes);
343-
let tlv_stream: FullInvoiceRequestTlvStream = SeekReadable::read(&mut cursor)?;
344-
345-
if cursor.position() < cursor.get_ref().len() as u64 {
346-
return Err(ParseError::Decode(DecodeError::InvalidValue));
347-
}
348-
349-
let bytes = cursor.into_inner();
350-
InvoiceRequest::try_from((bytes, tlv_stream))
342+
let parsed_invoice_request = ParsedInvoiceRequest::try_from(bytes)?;
343+
InvoiceRequest::try_from(parsed_invoice_request)
351344
}
352345
}
353346

@@ -360,7 +353,9 @@ tlv_stream!(InvoiceRequestTlvStream, InvoiceRequestTlvStreamRef, 80..160, {
360353
(89, payer_note: (String, WithoutLength)),
361354
});
362355

363-
type ParsedInvoiceRequest = (Vec<u8>, FullInvoiceRequestTlvStream);
356+
try_from_tlv_stream_bytes!(FullInvoiceRequestTlvStream, ParsedInvoiceRequest);
357+
358+
struct ParsedInvoiceRequest(Vec<u8>, FullInvoiceRequestTlvStream);
364359

365360
type FullInvoiceRequestTlvStream =
366361
(PayerTlvStream, OfferTlvStream, InvoiceRequestTlvStream, SignatureTlvStream);
@@ -388,7 +383,7 @@ impl TryFrom<ParsedInvoiceRequest> for InvoiceRequest {
388383
type Error = ParseError;
389384

390385
fn try_from(invoice_request: ParsedInvoiceRequest) -> Result<Self, Self::Error> {
391-
let (bytes, tlv_stream) = invoice_request;
386+
let ParsedInvoiceRequest(bytes, tlv_stream) = invoice_request;
392387
let (
393388
payer_tlv_stream, offer_tlv_stream, invoice_request_tlv_stream,
394389
SignatureTlvStream { signature },

lightning/src/offers/offer.rs

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ use core::str::FromStr;
7575
use core::time::Duration;
7676
use crate::io;
7777
use crate::ln::features::OfferFeatures;
78-
use crate::ln::msgs::{DecodeError, MAX_VALUE_MSAT};
78+
use crate::ln::msgs::MAX_VALUE_MSAT;
7979
use crate::offers::invoice_request::InvoiceRequestBuilder;
8080
use crate::offers::parse::{Bech32Encode, ParseError, SemanticError};
8181
use crate::onion_message::BlindedPath;
@@ -468,15 +468,8 @@ impl TryFrom<Vec<u8>> for Offer {
468468
type Error = ParseError;
469469

470470
fn try_from(bytes: Vec<u8>) -> Result<Self, Self::Error> {
471-
let mut cursor = io::Cursor::new(bytes);
472-
let tlv_stream: OfferTlvStream = SeekReadable::read(&mut cursor)?;
473-
474-
if cursor.position() < cursor.get_ref().len() as u64 {
475-
return Err(ParseError::Decode(DecodeError::InvalidValue));
476-
}
477-
478-
let bytes = cursor.into_inner();
479-
Offer::try_from((bytes, tlv_stream))
471+
let parsed_offer = ParsedOffer::try_from(bytes)?;
472+
Offer::try_from(parsed_offer)
480473
}
481474
}
482475

@@ -549,11 +542,13 @@ tlv_stream!(OfferTlvStream, OfferTlvStreamRef, 1..80, {
549542
(22, node_id: PublicKey),
550543
});
551544

545+
try_from_tlv_stream_bytes!(OfferTlvStream, ParsedOffer);
546+
552547
impl Bech32Encode for Offer {
553548
const BECH32_HRP: &'static str = "lno";
554549
}
555550

556-
type ParsedOffer = (Vec<u8>, OfferTlvStream);
551+
struct ParsedOffer(Vec<u8>, OfferTlvStream);
557552

558553
impl FromStr for Offer {
559554
type Err = ParseError;
@@ -567,7 +562,7 @@ impl TryFrom<ParsedOffer> for Offer {
567562
type Error = ParseError;
568563

569564
fn try_from(offer: ParsedOffer) -> Result<Self, Self::Error> {
570-
let (bytes, tlv_stream) = offer;
565+
let ParsedOffer(bytes, tlv_stream) = offer;
571566
let contents = OfferContents::try_from(tlv_stream)?;
572567
Ok(Offer { bytes, contents })
573568
}

lightning/src/util/ser_macros.rs

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

554+
macro_rules! try_from_tlv_stream_bytes {
555+
($tlv_stream:ty, $parsed_message:ident) => {
556+
impl TryFrom<Vec<u8>> for $parsed_message {
557+
type Error = $crate::ln::msgs::DecodeError;
558+
559+
fn try_from(bytes: Vec<u8>) -> Result<Self, Self::Error> {
560+
let mut cursor = $crate::io::Cursor::new(bytes);
561+
let tlv_stream: $tlv_stream = SeekReadable::read(&mut cursor)?;
562+
563+
if cursor.position() < cursor.get_ref().len() as u64 {
564+
return Err($crate::ln::msgs::DecodeError::InvalidValue);
565+
}
566+
567+
let bytes = cursor.into_inner();
568+
Ok(Self(bytes, tlv_stream))
569+
}
570+
}
571+
};
572+
}
573+
554574
macro_rules! _impl_writeable_tlv_based_enum_common {
555575
($st: ident, $(($variant_id: expr, $variant_name: ident) =>
556576
{$(($type: expr, $field: ident, $fieldty: tt)),* $(,)*}

0 commit comments

Comments
 (0)