use clap::{Parser, ValueEnum};
use std::path::PathBuf;
const HELP_TEMPLATE: &str = r#"
{name} v{version} - {author}
{about}
{usage-heading}
{tab}{usage}
{all-args}"#;
#[derive(Debug, ValueEnum, Clone, Copy)]
pub enum SortDirection {
Descending,
Ascending,
}
#[derive(Debug, Parser)]
#[command(
author,
version,
about,
long_about = None,
help_template = HELP_TEMPLATE,
)]
pub struct Cli {
#[arg(short, long, value_name = "FILE")]
pub input: Option<PathBuf>,
#[arg(short = 'f', long, value_name = "CHAR")]
pub input_field_delimiter: Option<char>,
#[arg(short = 't', long, value_name = "CHAR")]
pub input_record_terminator: Option<char>,
#[arg(short = 'c', long, value_name = "CHAR")]
pub input_quote_character: Option<char>,
#[arg(short, long, value_name = "FILE")]
pub output: Option<PathBuf>,
#[arg(short = 'F', long, value_name = "CHAR")]
pub output_field_delimiter: Option<char>,
#[arg(short = 'T', long, value_name = "CHAR")]
pub output_record_terminator: Option<char>,
#[arg(short = 'C', long, value_name = "CHAR")]
pub output_quote_character: Option<char>,
#[arg(short = 'n', long)]
pub disable_output_headers: bool,
#[arg(short, long, value_enum, value_name = "DIRECTION")]
pub sort: Option<SortDirection>,
#[arg(
short,
long,
conflicts_with_all = [
"output",
"output_field_delimiter",
"output_record_terminator",
"output_quote_character"
]
)]
pub pretty_table: bool,
}
impl Cli {
pub fn parse_args() -> Self {
Cli::parse()
}
}