- let (payment_hash, recipient_onion, route_params) =
- match payment_parameters_from_invoice(invoice) {
- Ok(res) => res,
- Err(e) => {
- println!("Failed to parse invoice");
- print!("> ");
- return;
- }
- };
+ let zero_amt_invoice =
+ invoice.amount_milli_satoshis().is_none() || invoice.amount_milli_satoshis() == Some(0);
+ let pay_params_opt = if zero_amt_invoice {
+ if let Some(amt_msat) = required_amount_msat {
+ payment_parameters_from_zero_amount_invoice(invoice, amt_msat)
+ } else {
+ println!("Need an amount for the given 0-value invoice");
+ print!("> ");
+ return;
+ }
+ } else {
+ if required_amount_msat.is_some() && invoice.amount_milli_satoshis() != required_amount_msat
+ {
+ println!(
+ "Amount didn't match invoice value of {}msat",
+ invoice.amount_milli_satoshis().unwrap_or(0)
+ );
+ print!("> ");
+ return;
+ }
+ payment_parameters_from_invoice(invoice)
+ };
+ let (payment_hash, recipient_onion, route_params) = match pay_params_opt {
+ Ok(res) => res,
+ Err(e) => {
+ println!("Failed to parse invoice");
+ print!("> ");
+ return;
+ }
+ };