Skip to content

Commit 28269a7

Browse files
DRY handling when initiating payment to BOLT 12 invoice.
1 parent b6f4479 commit 28269a7

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
@@ -10943,6 +10943,35 @@ where
1094310943
let secp_ctx = &self.secp_ctx;
1094410944
let expanded_key = &self.inbound_payment_key;
1094510945

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+
1094610975
match message {
1094710976
OffersMessage::InvoiceRequest(invoice_request) => {
1094810977
let responder = match responder {
@@ -11069,32 +11098,8 @@ where
1106911098
return None;
1107011099
}
1107111100

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);
1109811103
},
1109911104
#[cfg(async_payments)]
1110011105
OffersMessage::StaticInvoice(invoice) => {
@@ -11107,30 +11112,8 @@ where
1110711112
},
1110811113
_ => return None
1110911114
};
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);
1113411117
},
1113511118
OffersMessage::InvoiceError(invoice_error) => {
1113611119
let payment_hash = match context {

0 commit comments

Comments
 (0)