@@ -16,6 +16,7 @@ use crate::offers::invoice_error::InvoiceError;
1616use crate :: offers:: invoice_request:: InvoiceRequest ;
1717use crate :: offers:: invoice:: Bolt12Invoice ;
1818use crate :: offers:: parse:: Bolt12ParseError ;
19+ use crate :: offers:: static_invoice:: StaticInvoice ;
1920use crate :: onion_message:: packet:: OnionMessageContents ;
2021use crate :: util:: logger:: Logger ;
2122use crate :: util:: ser:: { Readable , ReadableArgs , Writeable , Writer } ;
@@ -29,6 +30,7 @@ use crate::prelude::*;
2930const INVOICE_REQUEST_TLV_TYPE : u64 = 64 ;
3031const INVOICE_TLV_TYPE : u64 = 66 ;
3132const INVOICE_ERROR_TLV_TYPE : u64 = 68 ;
33+ const STATIC_INVOICE_TLV_TYPE : u64 = 70 ;
3234
3335/// A handler for an [`OnionMessage`] containing a BOLT 12 Offers message as its payload.
3436///
@@ -72,6 +74,9 @@ pub enum OffersMessage {
7274 /// [`Refund`]: crate::offers::refund::Refund
7375 Invoice ( Bolt12Invoice ) ,
7476
77+ /// A `StaticInvoice` sent in response to an [`InvoiceRequest`].
78+ StaticInvoice ( StaticInvoice ) ,
79+
7580 /// An error from handling an [`OffersMessage`].
7681 InvoiceError ( InvoiceError ) ,
7782}
@@ -80,7 +85,10 @@ impl OffersMessage {
8085 /// Returns whether `tlv_type` corresponds to a TLV record for Offers.
8186 pub fn is_known_type ( tlv_type : u64 ) -> bool {
8287 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 ,
8492 _ => false ,
8593 }
8694 }
@@ -89,6 +97,7 @@ impl OffersMessage {
8997 match tlv_type {
9098 INVOICE_REQUEST_TLV_TYPE => Ok ( Self :: InvoiceRequest ( InvoiceRequest :: try_from ( bytes) ?) ) ,
9199 INVOICE_TLV_TYPE => Ok ( Self :: Invoice ( Bolt12Invoice :: try_from ( bytes) ?) ) ,
100+ STATIC_INVOICE_TLV_TYPE => Ok ( Self :: StaticInvoice ( StaticInvoice :: try_from ( bytes) ?) ) ,
92101 _ => Err ( Bolt12ParseError :: Decode ( DecodeError :: InvalidValue ) ) ,
93102 }
94103 }
@@ -103,6 +112,9 @@ impl fmt::Debug for OffersMessage {
103112 OffersMessage :: Invoice ( message) => {
104113 write ! ( f, "{:?}" , message. as_tlv_stream( ) )
105114 }
115+ OffersMessage :: StaticInvoice ( message) => {
116+ write ! ( f, "{:?}" , message)
117+ }
106118 OffersMessage :: InvoiceError ( message) => {
107119 write ! ( f, "{:?}" , message)
108120 }
@@ -115,13 +127,15 @@ impl OnionMessageContents for OffersMessage {
115127 match self {
116128 OffersMessage :: InvoiceRequest ( _) => INVOICE_REQUEST_TLV_TYPE ,
117129 OffersMessage :: Invoice ( _) => INVOICE_TLV_TYPE ,
130+ OffersMessage :: StaticInvoice ( _) => STATIC_INVOICE_TLV_TYPE ,
118131 OffersMessage :: InvoiceError ( _) => INVOICE_ERROR_TLV_TYPE ,
119132 }
120133 }
121134 fn msg_type ( & self ) -> & ' static str {
122135 match & self {
123136 OffersMessage :: InvoiceRequest ( _) => "Invoice Request" ,
124137 OffersMessage :: Invoice ( _) => "Invoice" ,
138+ OffersMessage :: StaticInvoice ( _) => "Static Invoice" ,
125139 OffersMessage :: InvoiceError ( _) => "Invoice Error" ,
126140 }
127141 }
@@ -132,6 +146,7 @@ impl Writeable for OffersMessage {
132146 match self {
133147 OffersMessage :: InvoiceRequest ( message) => message. write ( w) ,
134148 OffersMessage :: Invoice ( message) => message. write ( w) ,
149+ OffersMessage :: StaticInvoice ( message) => message. write ( w) ,
135150 OffersMessage :: InvoiceError ( message) => message. write ( w) ,
136151 }
137152 }
0 commit comments