@@ -75,7 +75,7 @@ use core::str::FromStr;
7575use core:: time:: Duration ;
7676use io;
7777use ln:: features:: OfferFeatures ;
78- use ln:: msgs:: { DecodeError , MAX_VALUE_MSAT } ;
78+ use ln:: msgs:: MAX_VALUE_MSAT ;
7979use offers:: invoice_request:: InvoiceRequestBuilder ;
8080use offers:: parse:: { Bech32Encode , ParseError , SemanticError } ;
8181use onion_message:: BlindedPath ;
@@ -447,15 +447,8 @@ impl TryFrom<Vec<u8>> for Offer {
447447 type Error = ParseError ;
448448
449449 fn try_from ( bytes : Vec < u8 > ) -> Result < Self , Self :: Error > {
450- let mut cursor = io:: Cursor :: new ( bytes) ;
451- let tlv_stream: OfferTlvStream = SeekReadable :: read ( & mut cursor) ?;
452-
453- if cursor. position ( ) < cursor. get_ref ( ) . len ( ) as u64 {
454- return Err ( ParseError :: Decode ( DecodeError :: InvalidValue ) ) ;
455- }
456-
457- let bytes = cursor. into_inner ( ) ;
458- Offer :: try_from ( ( bytes, tlv_stream) )
450+ let parsed_offer = ParsedOffer :: try_from ( bytes) ?;
451+ Offer :: try_from ( parsed_offer)
459452 }
460453}
461454
@@ -533,11 +526,13 @@ tlv_stream!(OfferTlvStream, OfferTlvStreamRef, 1..80, {
533526 ( 22 , node_id: PublicKey ) ,
534527} ) ;
535528
529+ try_from_tlv_stream_bytes ! ( OfferTlvStream , ParsedOffer ) ;
530+
536531impl Bech32Encode for Offer {
537532 const BECH32_HRP : & ' static str = "lno" ;
538533}
539534
540- type ParsedOffer = ( Vec < u8 > , OfferTlvStream ) ;
535+ struct ParsedOffer ( Vec < u8 > , OfferTlvStream ) ;
541536
542537impl FromStr for Offer {
543538 type Err = ParseError ;
@@ -551,7 +546,7 @@ impl TryFrom<ParsedOffer> for Offer {
551546 type Error = ParseError ;
552547
553548 fn try_from ( offer : ParsedOffer ) -> Result < Self , Self :: Error > {
554- let ( bytes, tlv_stream) = offer;
549+ let ParsedOffer ( bytes, tlv_stream) = offer;
555550 let contents = OfferContents :: try_from ( tlv_stream) ?;
556551 Ok ( Offer { bytes, contents } )
557552 }
0 commit comments