use clap::{Parser, Subcommand};
use crate::client::types::{ReceiveVia, Wallet};
use rust_decimal::Decimal;
#[derive(Parser)]
#[clap(
version,
author = "Galoy",
about = "Galoy CLI",
long_about = "CLI client to interact with Galoy's APIs"
)]
pub struct Cli {
#[clap(
long,
env = "GALOY_API",
default_value = "http://localhost:4455/graphql"
)]
pub api: String,
#[clap(subcommand)]
pub command: Command,
}
#[derive(Subcommand)]
pub enum Command {
Globals,
Login {
#[clap(short, long, value_parser)]
phone: Option<String>,
#[clap(long, conflicts_with("phone"))]
email: bool,
#[clap(short, long)]
code: String,
#[clap(short = 't', long = "two-fa-code", value_parser)]
two_fa_code: Option<String>,
},
Logout,
Me,
DefaultWallet {
#[clap(value_parser)]
username: String,
},
SetDefaultWallet {
#[clap(short, long, value_parser, conflicts_with("wallet_id"))]
wallet: Option<Wallet>,
#[clap(long)]
wallet_id: Option<String>,
},
SetUsername {
#[clap(short, long)]
username: String,
},
Balance {
#[clap(long)]
btc: bool,
#[clap(long)]
usd: bool,
#[clap(long, use_value_delimiter = true)]
wallet_ids: Vec<String>,
},
Pay {
#[clap(short, long)]
username: Option<String>,
#[clap(short, long, conflicts_with("username"))]
onchain_address: Option<String>,
#[clap(short, long, value_parser)]
wallet: Wallet,
#[clap(short, long, required_if_eq("wallet", "usd"))]
cents: Option<Decimal>,
#[clap(short, long, required_if_eq("wallet", "btc"))]
sats: Option<Decimal>,
#[clap(short, long)]
memo: Option<String>,
},
Receive {
#[clap(short, long, value_parser)]
wallet: Wallet,
#[clap(short, long, value_parser)]
via: ReceiveVia,
},
Batch {
#[clap(short, long = "csv")]
file: String,
#[clap(action, long)]
skip_confirmation: bool,
},
RequestCode {
#[clap(short, long, value_parser, conflicts_with("email"))]
phone: Option<String>,
#[clap(short, long, value_parser)]
email: Option<String>,
},
}