@@ -14,11 +14,13 @@ use bitcoin::secp256k1::PublicKey;
14
14
use bitcoin:: secp256k1:: schnorr:: Signature ;
15
15
use core:: convert:: TryFrom ;
16
16
use core:: str:: FromStr ;
17
+ use io;
17
18
use ln:: features:: OfferFeatures ;
18
- use offers:: PayerTlvStream ;
19
+ use offers:: { PayerTlvStream , self } ;
19
20
use offers:: merkle:: { SignatureTlvStream , self } ;
20
- use offers:: offer:: { Amount , OfferContents , OfferTlvStream } ;
21
+ use offers:: offer:: { Amount , OfferContents , OfferTlvStream , self } ;
21
22
use offers:: parse:: { Bech32Encode , ParseError , SemanticError } ;
23
+ use util:: ser:: { Writeable , Writer } ;
22
24
23
25
///
24
26
pub struct InvoiceRequest {
@@ -45,6 +47,37 @@ impl AsRef<[u8]> for InvoiceRequest {
45
47
}
46
48
}
47
49
50
+ impl InvoiceRequestContents {
51
+ pub ( super ) fn as_tlv_stream ( & self ) -> ReferencedFullInvoiceRequestTlvStream {
52
+ let payer = offers:: reference:: PayerTlvStream {
53
+ payer_info : self . payer_info . as_ref ( ) . map ( Into :: into) ,
54
+ } ;
55
+
56
+ let offer = self . offer . as_tlv_stream ( ) ;
57
+
58
+ let invoice_request = reference:: InvoiceRequestTlvStream {
59
+ chain : self . chain . as_ref ( ) ,
60
+ amount : self . amount_msats . map ( Into :: into) ,
61
+ features : self . features . as_ref ( ) ,
62
+ quantity : self . quantity . map ( Into :: into) ,
63
+ payer_id : Some ( & self . payer_id ) ,
64
+ payer_note : self . payer_note . as_ref ( ) . map ( Into :: into) ,
65
+ } ;
66
+
67
+ let signature = merkle:: reference:: SignatureTlvStream {
68
+ signature : self . signature . as_ref ( ) ,
69
+ } ;
70
+
71
+ ( payer, offer, invoice_request, signature)
72
+ }
73
+ }
74
+
75
+ impl Writeable for InvoiceRequestContents {
76
+ fn write < W : Writer > ( & self , writer : & mut W ) -> Result < ( ) , io:: Error > {
77
+ self . as_tlv_stream ( ) . write ( writer)
78
+ }
79
+ }
80
+
48
81
tlv_stream ! ( struct InvoiceRequestTlvStream {
49
82
( 80 , chain: BlockHash ) ,
50
83
( 82 , amount: u64 ) ,
@@ -63,6 +96,13 @@ impl Bech32Encode for InvoiceRequest {
63
96
type FullInvoiceRequestTlvStream =
64
97
( PayerTlvStream , OfferTlvStream , InvoiceRequestTlvStream , SignatureTlvStream ) ;
65
98
99
+ type ReferencedFullInvoiceRequestTlvStream < ' a > = (
100
+ offers:: reference:: PayerTlvStream < ' a > ,
101
+ offer:: reference:: OfferTlvStream < ' a > ,
102
+ reference:: InvoiceRequestTlvStream < ' a > ,
103
+ merkle:: reference:: SignatureTlvStream < ' a > ,
104
+ ) ;
105
+
66
106
impl FromStr for InvoiceRequest {
67
107
type Err = ParseError ;
68
108
0 commit comments