use anyhow::Result;
use clap::Args;
use tonic::Request;
use crate::payment_method::{Bolt11MeltMethodOptions, UpdateMeltMethodRequest};
use crate::InterceptedPaymentMethodServiceClient;
#[derive(Args, Debug)]
pub struct UpdateMeltMethodCommand {
#[arg(short, long)]
#[arg(default_value = "sat")]
unit: String,
#[arg(short, long)]
#[arg(default_value = "bolt11")]
method: String,
#[arg(long)]
min_amount: Option<u64>,
#[arg(long)]
max_amount: Option<u64>,
#[arg(long)]
method_name: Option<String>,
#[arg(long)]
amountless: Option<bool>,
}
pub async fn update_melt_method(
client: &mut InterceptedPaymentMethodServiceClient,
sub_command_args: &UpdateMeltMethodCommand,
) -> Result<()> {
let options = sub_command_args
.amountless
.map(|amountless| Bolt11MeltMethodOptions { amountless });
let response = client
.update_melt_method(Request::new(UpdateMeltMethodRequest {
method: sub_command_args.method.clone(),
unit: sub_command_args.unit.clone(),
min_amount: sub_command_args.min_amount,
max_amount: sub_command_args.max_amount,
options,
method_name: sub_command_args.method_name.clone(),
}))
.await?
.into_inner();
println!("Melt method settings:");
println!(" Unit: {}", response.unit);
println!(" Method: {}", response.method);
println!(
" Min amount: {}",
response
.min_amount
.map_or("none".to_string(), |a| a.to_string())
);
println!(
" Max amount: {}",
response
.max_amount
.map_or("none".to_string(), |a| a.to_string())
);
println!(
" Method name: {}",
response.method_name.unwrap_or_else(|| "none".to_string())
);
if let Some(options) = response.options {
println!(" Bolt11 amountless: {}", options.amountless);
}
Ok(())
}