Files
ecb-rates/src/cli/cli_t.rs
2025-01-09 15:45:55 +01:00

60 lines
1.6 KiB
Rust

use clap::{arg, Parser, ValueEnum};
use super::{ShowDays, SortBy};
#[derive(Debug, Parser)]
#[command(author, version, about)]
pub struct Cli {
/// Which currencies do you want to fetch rates for?
#[arg(long = "currencies", short = 'c')]
pub currencies: Vec<String>,
#[arg(value_enum, default_value_t = FormatOption::Plain)]
pub command: FormatOption,
/// Don't show time in output
#[arg(long = "no-time")]
pub no_time: bool,
/// Print currencies in a compact single line
#[arg(long = "compact")]
pub compact: bool,
/// Override the cache
#[arg(long = "no-cache")]
pub no_cache: bool,
/// Force color in output. Normally it will disable color in pipes
#[arg(long = "force-color")]
pub force_color: bool,
/// Sort by the currency name (in alphabetical order), or by the rate value (low -> high)
#[arg(value_enum, long = "sort-by", default_value_t = SortBy::Currency)]
pub sort_by: SortBy,
/// Recalculate to the perspective from an included currency
#[arg(long = "perspective", short = 'p')]
pub perspective: Option<String>,
/// Invert the rate
#[arg(long = "invert", short = 'i')]
pub should_invert: bool,
//// Max decimals to keep in price.
#[arg(long = "max-decimals", short = 'd', default_value_t = 5)]
pub max_decimals: u8,
/// Amount of data
#[arg(default_value_t = ShowDays::Days(1), long="show-days", short='s')]
pub show_days: ShowDays,
}
#[derive(Debug, Clone, Copy, ValueEnum)]
pub enum FormatOption {
/// JSON output
Json,
/// Plain line-by-line output (with extra flags)
Plain,
}