Skip to content

Commit c58e667

Browse files
DRY handling when initiating payment to BOLT 12 invoice.
1 parent d4c7c44 commit c58e667

File tree

1 file changed

+33
-50
lines changed

1 file changed

+33
-50
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 33 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -10856,6 +10856,35 @@ where
1085610856
let secp_ctx = &self.secp_ctx;
1085710857
let expanded_key = &self.inbound_payment_key;
1085810858

10859+
macro_rules! handle_pay_invoice_res {
10860+
($res: expr, $invoice: expr, $logger: expr) => {{
10861+
let error = match $res {
10862+
Err(Bolt12PaymentError::UnknownRequiredFeatures) => {
10863+
log_trace!(
10864+
$logger, "Invoice requires unknown features: {:?}",
10865+
$invoice.invoice_features()
10866+
);
10867+
InvoiceError::from(Bolt12SemanticError::UnknownRequiredFeatures)
10868+
},
10869+
Err(Bolt12PaymentError::SendingFailed(e)) => {
10870+
log_trace!($logger, "Failed paying invoice: {:?}", e);
10871+
InvoiceError::from_string(format!("{:?}", e))
10872+
},
10873+
Err(Bolt12PaymentError::UnexpectedInvoice)
10874+
| Err(Bolt12PaymentError::DuplicateInvoice)
10875+
| Ok(()) => return None,
10876+
};
10877+
10878+
match responder {
10879+
Some(responder) => return Some((OffersMessage::InvoiceError(error), responder.respond())),
10880+
None => {
10881+
log_trace!($logger, "No reply path to send error: {:?}", error);
10882+
return None
10883+
},
10884+
}
10885+
}}
10886+
}
10887+
1085910888
match message {
1086010889
OffersMessage::InvoiceRequest(invoice_request) => {
1086110890
let responder = match responder {
@@ -10977,63 +11006,17 @@ where
1097711006
return None;
1097811007
}
1097911008

10980-
let error = match self.send_payment_for_verified_bolt12_invoice(
10981-
&invoice, payment_id,
10982-
) {
10983-
Err(Bolt12PaymentError::UnknownRequiredFeatures) => {
10984-
log_trace!(
10985-
logger, "Invoice requires unknown features: {:?}",
10986-
invoice.invoice_features()
10987-
);
10988-
InvoiceError::from(Bolt12SemanticError::UnknownRequiredFeatures)
10989-
},
10990-
Err(Bolt12PaymentError::SendingFailed(e)) => {
10991-
log_trace!(logger, "Failed paying invoice: {:?}", e);
10992-
InvoiceError::from_string(format!("{:?}", e))
10993-
},
10994-
Err(Bolt12PaymentError::UnexpectedInvoice)
10995-
| Err(Bolt12PaymentError::DuplicateInvoice)
10996-
| Ok(()) => return None,
10997-
};
10998-
10999-
match responder {
11000-
Some(responder) => Some((OffersMessage::InvoiceError(error), responder.respond())),
11001-
None => {
11002-
log_trace!(logger, "No reply path to send error: {:?}", error);
11003-
None
11004-
},
11005-
}
11009+
let res = self.send_payment_for_verified_bolt12_invoice(&invoice, payment_id);
11010+
handle_pay_invoice_res!(res, invoice, logger);
1100611011
},
1100711012
#[cfg(async_payments)]
1100811013
OffersMessage::StaticInvoice(invoice) => {
1100911014
let payment_id = match context {
1101011015
Some(OffersContext::OutboundPayment { payment_id, nonce: _, hmac: _ }) => payment_id,
1101111016
_ => return None
1101211017
};
11013-
// TODO: DRY this with the above regular invoice error handling
11014-
let error = match self.initiate_async_payment(&invoice, payment_id) {
11015-
Err(Bolt12PaymentError::UnknownRequiredFeatures) => {
11016-
log_trace!(
11017-
self.logger, "Invoice requires unknown features: {:?}",
11018-
invoice.invoice_features()
11019-
);
11020-
InvoiceError::from(Bolt12SemanticError::UnknownRequiredFeatures)
11021-
},
11022-
Err(Bolt12PaymentError::SendingFailed(e)) => {
11023-
log_trace!(self.logger, "Failed paying invoice: {:?}", e);
11024-
InvoiceError::from_string(format!("{:?}", e))
11025-
},
11026-
Err(Bolt12PaymentError::UnexpectedInvoice)
11027-
| Err(Bolt12PaymentError::DuplicateInvoice)
11028-
| Ok(()) => return None,
11029-
};
11030-
match responder {
11031-
Some(responder) => Some((OffersMessage::InvoiceError(error), responder.respond())),
11032-
None => {
11033-
log_trace!(self.logger, "No reply path to send error: {:?}", error);
11034-
None
11035-
},
11036-
}
11018+
let res = self.initiate_async_payment(&invoice, payment_id);
11019+
handle_pay_invoice_res!(res, invoice, self.logger);
1103711020
},
1103811021
OffersMessage::InvoiceError(invoice_error) => {
1103911022
let payment_hash = match context {

0 commit comments

Comments
 (0)