+ fn parse(tlv_type: u64, bytes: Vec<u8>) -> Result<Self, Bolt12ParseError> {
+ match tlv_type {
+ INVOICE_REQUEST_TLV_TYPE => Ok(Self::InvoiceRequest(InvoiceRequest::try_from(bytes)?)),
+ INVOICE_TLV_TYPE => Ok(Self::Invoice(Bolt12Invoice::try_from(bytes)?)),
+ _ => Err(Bolt12ParseError::Decode(DecodeError::InvalidValue)),
+ }
+ }
+}
+
+impl fmt::Debug for OffersMessage {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ match self {
+ OffersMessage::InvoiceRequest(message) => {
+ write!(f, "{:?}", message.as_tlv_stream())
+ }
+ OffersMessage::Invoice(message) => {
+ write!(f, "{:?}", message.as_tlv_stream())
+ }
+ OffersMessage::InvoiceError(message) => {
+ write!(f, "{:?}", message)
+ }
+ }
+ }
+}
+
+impl OnionMessageContents for OffersMessage {
+ fn tlv_type(&self) -> u64 {