@@ -16,6 +16,7 @@ use crate::offers::invoice_error::InvoiceError;
16
16
use crate :: offers:: invoice_request:: InvoiceRequest ;
17
17
use crate :: offers:: invoice:: Bolt12Invoice ;
18
18
use crate :: offers:: parse:: Bolt12ParseError ;
19
+ use crate :: offers:: static_invoice:: StaticInvoice ;
19
20
use crate :: onion_message:: packet:: OnionMessageContents ;
20
21
use crate :: util:: logger:: Logger ;
21
22
use crate :: util:: ser:: { Readable , ReadableArgs , Writeable , Writer } ;
@@ -29,6 +30,7 @@ use crate::prelude::*;
29
30
const INVOICE_REQUEST_TLV_TYPE : u64 = 64 ;
30
31
const INVOICE_TLV_TYPE : u64 = 66 ;
31
32
const INVOICE_ERROR_TLV_TYPE : u64 = 68 ;
33
+ const STATIC_INVOICE_TLV_TYPE : u64 = 70 ;
32
34
33
35
/// A handler for an [`OnionMessage`] containing a BOLT 12 Offers message as its payload.
34
36
///
@@ -72,6 +74,9 @@ pub enum OffersMessage {
72
74
/// [`Refund`]: crate::offers::refund::Refund
73
75
Invoice ( Bolt12Invoice ) ,
74
76
77
+ /// A [`StaticInvoice`] sent in response to an [`InvoiceRequest`].
78
+ StaticInvoice ( StaticInvoice ) ,
79
+
75
80
/// An error from handling an [`OffersMessage`].
76
81
InvoiceError ( InvoiceError ) ,
77
82
}
@@ -80,7 +85,10 @@ impl OffersMessage {
80
85
/// Returns whether `tlv_type` corresponds to a TLV record for Offers.
81
86
pub fn is_known_type ( tlv_type : u64 ) -> bool {
82
87
match tlv_type {
83
- INVOICE_REQUEST_TLV_TYPE | INVOICE_TLV_TYPE | INVOICE_ERROR_TLV_TYPE => true ,
88
+ INVOICE_REQUEST_TLV_TYPE
89
+ | INVOICE_TLV_TYPE
90
+ | STATIC_INVOICE_TLV_TYPE
91
+ | INVOICE_ERROR_TLV_TYPE => true ,
84
92
_ => false ,
85
93
}
86
94
}
@@ -89,6 +97,7 @@ impl OffersMessage {
89
97
match tlv_type {
90
98
INVOICE_REQUEST_TLV_TYPE => Ok ( Self :: InvoiceRequest ( InvoiceRequest :: try_from ( bytes) ?) ) ,
91
99
INVOICE_TLV_TYPE => Ok ( Self :: Invoice ( Bolt12Invoice :: try_from ( bytes) ?) ) ,
100
+ STATIC_INVOICE_TLV_TYPE => Ok ( Self :: StaticInvoice ( StaticInvoice :: try_from ( bytes) ?) ) ,
92
101
_ => Err ( Bolt12ParseError :: Decode ( DecodeError :: InvalidValue ) ) ,
93
102
}
94
103
}
@@ -103,6 +112,9 @@ impl fmt::Debug for OffersMessage {
103
112
OffersMessage :: Invoice ( message) => {
104
113
write ! ( f, "{:?}" , message. as_tlv_stream( ) )
105
114
}
115
+ OffersMessage :: StaticInvoice ( message) => {
116
+ write ! ( f, "{:?}" , message)
117
+ }
106
118
OffersMessage :: InvoiceError ( message) => {
107
119
write ! ( f, "{:?}" , message)
108
120
}
@@ -115,13 +127,15 @@ impl OnionMessageContents for OffersMessage {
115
127
match self {
116
128
OffersMessage :: InvoiceRequest ( _) => INVOICE_REQUEST_TLV_TYPE ,
117
129
OffersMessage :: Invoice ( _) => INVOICE_TLV_TYPE ,
130
+ OffersMessage :: StaticInvoice ( _) => STATIC_INVOICE_TLV_TYPE ,
118
131
OffersMessage :: InvoiceError ( _) => INVOICE_ERROR_TLV_TYPE ,
119
132
}
120
133
}
121
134
fn msg_type ( & self ) -> & ' static str {
122
135
match & self {
123
136
OffersMessage :: InvoiceRequest ( _) => "Invoice Request" ,
124
137
OffersMessage :: Invoice ( _) => "Invoice" ,
138
+ OffersMessage :: StaticInvoice ( _) => "Static Invoice" ,
125
139
OffersMessage :: InvoiceError ( _) => "Invoice Error" ,
126
140
}
127
141
}
@@ -132,6 +146,7 @@ impl Writeable for OffersMessage {
132
146
match self {
133
147
OffersMessage :: InvoiceRequest ( message) => message. write ( w) ,
134
148
OffersMessage :: Invoice ( message) => message. write ( w) ,
149
+ OffersMessage :: StaticInvoice ( message) => message. write ( w) ,
135
150
OffersMessage :: InvoiceError ( message) => message. write ( w) ,
136
151
}
137
152
}
0 commit comments