@@ -10943,6 +10943,35 @@ where
10943
10943
let secp_ctx = &self.secp_ctx;
10944
10944
let expanded_key = &self.inbound_payment_key;
10945
10945
10946
+ macro_rules! handle_pay_invoice_res {
10947
+ ($res: expr, $invoice: expr, $logger: expr) => {{
10948
+ let error = match $res {
10949
+ Err(Bolt12PaymentError::UnknownRequiredFeatures) => {
10950
+ log_trace!(
10951
+ $logger, "Invoice requires unknown features: {:?}",
10952
+ $invoice.invoice_features()
10953
+ );
10954
+ InvoiceError::from(Bolt12SemanticError::UnknownRequiredFeatures)
10955
+ },
10956
+ Err(Bolt12PaymentError::SendingFailed(e)) => {
10957
+ log_trace!($logger, "Failed paying invoice: {:?}", e);
10958
+ InvoiceError::from_string(format!("{:?}", e))
10959
+ },
10960
+ Err(Bolt12PaymentError::UnexpectedInvoice)
10961
+ | Err(Bolt12PaymentError::DuplicateInvoice)
10962
+ | Ok(()) => return None,
10963
+ };
10964
+
10965
+ match responder {
10966
+ Some(responder) => return Some((OffersMessage::InvoiceError(error), responder.respond())),
10967
+ None => {
10968
+ log_trace!($logger, "No reply path to send error: {:?}", error);
10969
+ return None
10970
+ },
10971
+ }
10972
+ }}
10973
+ }
10974
+
10946
10975
match message {
10947
10976
OffersMessage::InvoiceRequest(invoice_request) => {
10948
10977
let responder = match responder {
@@ -11069,32 +11098,8 @@ where
11069
11098
return None;
11070
11099
}
11071
11100
11072
- let error = match self.send_payment_for_verified_bolt12_invoice(
11073
- &invoice, payment_id,
11074
- ) {
11075
- Err(Bolt12PaymentError::UnknownRequiredFeatures) => {
11076
- log_trace!(
11077
- logger, "Invoice requires unknown features: {:?}",
11078
- invoice.invoice_features()
11079
- );
11080
- InvoiceError::from(Bolt12SemanticError::UnknownRequiredFeatures)
11081
- },
11082
- Err(Bolt12PaymentError::SendingFailed(e)) => {
11083
- log_trace!(logger, "Failed paying invoice: {:?}", e);
11084
- InvoiceError::from_string(format!("{:?}", e))
11085
- },
11086
- Err(Bolt12PaymentError::UnexpectedInvoice)
11087
- | Err(Bolt12PaymentError::DuplicateInvoice)
11088
- | Ok(()) => return None,
11089
- };
11090
-
11091
- match responder {
11092
- Some(responder) => Some((OffersMessage::InvoiceError(error), responder.respond())),
11093
- None => {
11094
- log_trace!(logger, "No reply path to send error: {:?}", error);
11095
- None
11096
- },
11097
- }
11101
+ let res = self.send_payment_for_verified_bolt12_invoice(&invoice, payment_id);
11102
+ handle_pay_invoice_res!(res, invoice, logger);
11098
11103
},
11099
11104
#[cfg(async_payments)]
11100
11105
OffersMessage::StaticInvoice(invoice) => {
@@ -11107,30 +11112,8 @@ where
11107
11112
},
11108
11113
_ => return None
11109
11114
};
11110
- // TODO: DRY this with the above regular invoice error handling
11111
- let error = match self.initiate_async_payment(&invoice, payment_id) {
11112
- Err(Bolt12PaymentError::UnknownRequiredFeatures) => {
11113
- log_trace!(
11114
- self.logger, "Invoice requires unknown features: {:?}",
11115
- invoice.invoice_features()
11116
- );
11117
- InvoiceError::from(Bolt12SemanticError::UnknownRequiredFeatures)
11118
- },
11119
- Err(Bolt12PaymentError::SendingFailed(e)) => {
11120
- log_trace!(self.logger, "Failed paying invoice: {:?}", e);
11121
- InvoiceError::from_string(format!("{:?}", e))
11122
- },
11123
- Err(Bolt12PaymentError::UnexpectedInvoice)
11124
- | Err(Bolt12PaymentError::DuplicateInvoice)
11125
- | Ok(()) => return None,
11126
- };
11127
- match responder {
11128
- Some(responder) => Some((OffersMessage::InvoiceError(error), responder.respond())),
11129
- None => {
11130
- log_trace!(self.logger, "No reply path to send error: {:?}", error);
11131
- None
11132
- },
11133
- }
11115
+ let res = self.initiate_async_payment(&invoice, payment_id);
11116
+ handle_pay_invoice_res!(res, invoice, self.logger);
11134
11117
},
11135
11118
OffersMessage::InvoiceError(invoice_error) => {
11136
11119
let payment_hash = match context {
0 commit comments