@@ -15,15 +15,20 @@ use bitcoin::secp256k1::schnorr::Signature;
1515use core:: convert:: TryFrom ;
1616use core:: str:: FromStr ;
1717use ln:: features:: OfferFeatures ;
18- use offers:: { Offer , PayerTlvStream } ;
18+ use offers:: PayerTlvStream ;
1919use offers:: merkle:: SignatureTlvStream ;
20- use offers:: offer:: { OfferTlvStream , ParsedOffer } ;
20+ use offers:: offer:: { OfferContents , OfferTlvStream } ;
2121use offers:: parse:: { Bech32Encode , ParseError , SemanticError } ;
2222
2323///
2424pub struct InvoiceRequest {
2525 bytes : Vec < u8 > ,
26- offer : Offer ,
26+ contents : InvoiceRequestContents ,
27+ }
28+
29+ ///
30+ pub ( crate ) struct InvoiceRequestContents {
31+ offer : OfferContents ,
2732 chain : Option < BlockHash > ,
2833 amount_msat : Option < u64 > ,
2934 features : Option < OfferFeatures > ,
@@ -63,24 +68,23 @@ impl FromStr for InvoiceRequest {
6368
6469 fn from_str ( s : & str ) -> Result < Self , <Self as FromStr >:: Err > {
6570 let ( tlv_stream, bytes) = InvoiceRequest :: from_bech32_str ( s) ?;
66- Ok ( InvoiceRequest :: try_from ( ( tlv_stream, bytes) ) ?)
71+ let contents = InvoiceRequestContents :: try_from ( tlv_stream) ?;
72+ Ok ( InvoiceRequest { bytes, contents } )
6773 }
6874}
6975
70- type ParsedInvoiceRequest = ( FullInvoiceRequestTlvStream , Vec < u8 > ) ;
71-
72- impl TryFrom < ParsedInvoiceRequest > for InvoiceRequest {
76+ impl TryFrom < FullInvoiceRequestTlvStream > for InvoiceRequestContents {
7377 type Error = SemanticError ;
7478
75- fn try_from ( invoice_request : ParsedInvoiceRequest ) -> Result < Self , Self :: Error > {
76- let ( (
77- PayerTlvStream { payer_info } ,
78- offer_tlv_stream,
79- InvoiceRequestTlvStream { chain, amount, features, quantity, payer_id, payer_note } ,
80- SignatureTlvStream { signature } ,
81- ) , bytes ) = invoice_request ;
79+ fn try_from ( tlv_stream : FullInvoiceRequestTlvStream ) -> Result < Self , Self :: Error > {
80+ let (
81+ PayerTlvStream { payer_info } ,
82+ offer_tlv_stream,
83+ InvoiceRequestTlvStream { chain, amount, features, quantity, payer_id, payer_note } ,
84+ SignatureTlvStream { signature } ,
85+ ) = tlv_stream ;
8286
83- let offer = Offer :: try_from ( ParsedOffer ( offer_tlv_stream, vec ! [ ] ) ) ?;
87+ let offer = OfferContents :: try_from ( offer_tlv_stream) ?;
8488
8589 let chain = match chain {
8690 None => None ,
@@ -97,8 +101,8 @@ impl TryFrom<ParsedInvoiceRequest> for InvoiceRequest {
97101
98102 let payer_info = payer_info. map ( Into :: into) ;
99103
100- Ok ( InvoiceRequest {
101- bytes , offer, chain, amount_msat, features, quantity, payer_id, payer_note, payer_info,
104+ Ok ( InvoiceRequestContents {
105+ offer, chain, amount_msat, features, quantity, payer_id, payer_note, payer_info,
102106 signature,
103107 } )
104108 }
0 commit comments