use crate::filters::SortBy;
use crate::formatter::{DistributionFormat, DistributionType, OutputFormat};
use clap::Parser;
#[derive(Parser, Debug, Clone)]
#[command(name = "maram")]
#[command(author, version, about, long_about = None)]
#[command(arg_required_else_help = false)]
pub struct Args {
#[arg(default_value = ".")]
pub path: String,
#[arg(long, short = 'u')]
pub unicode: bool,
#[arg(long)]
pub color: bool,
#[arg(long, conflicts_with = "color")]
pub no_color: bool,
#[arg(long, short = 'f')]
pub full_path: bool,
#[arg(long, value_name = "N")]
pub max_dirs: Option<usize>,
#[arg(long, value_name = "N")]
pub max_files: Option<usize>,
#[arg(long, default_value = "true")]
pub show_size: bool,
#[arg(long)]
pub show_lines: bool,
#[arg(long)]
pub dir_sizes: bool,
#[arg(long, default_value = "1073741824", value_name = "BYTES")]
pub max_file_size: u64,
#[arg(long, value_name = "PATTERN")]
pub include: Option<String>,
#[arg(long, value_name = "PATTERN")]
pub exclude: Option<String>,
#[arg(long, conflicts_with = "only_files")]
pub only_dirs: bool,
#[arg(long, conflicts_with = "only_dirs")]
pub only_files: bool,
#[arg(long, value_name = "SIZE")]
pub min_size: Option<String>,
#[arg(long, value_name = "SIZE")]
pub max_size: Option<String>,
#[arg(long, value_name = "TIME")]
pub newer_than: Option<String>,
#[arg(long, value_name = "TIME")]
pub older_than: Option<String>,
#[arg(long)]
pub gitignore: bool,
#[arg(short, long)]
pub all: bool,
#[arg(long, value_enum, value_name = "FIELD")]
pub sort: Option<SortBy>,
#[arg(long, short = 'r')]
pub reverse: bool,
#[arg(long, value_name = "QUERY")]
pub search: Option<String>,
#[arg(long, short = 'i', requires = "search")]
pub ignore_case: bool,
#[arg(long, action = clap::ArgAction::SetTrue)]
pub total_size: bool,
#[arg(long, value_enum, value_name = "TYPE")]
pub dist: Option<DistributionType>,
#[arg(long, default_value = "10", value_name = "N", requires = "dist")]
pub top: usize,
#[arg(
long,
value_enum,
default_value = "chart",
value_name = "FORMAT",
requires = "dist"
)]
pub format: DistributionFormat,
#[arg(short = 'L', long, value_name = "N")]
pub depth: Option<usize>,
#[arg(long, value_enum, default_value = "tree", value_name = "FORMAT")]
pub output: OutputFormat,
#[arg(long, default_value = "0", value_name = "N")]
pub threads: usize,
#[arg(long)]
pub follow_symlinks: bool,
#[arg(long)]
pub git_status: bool,
#[arg(long)]
pub verbose: bool,
#[arg(long)]
pub bench: bool,
#[arg(long)]
pub ignore_errors: bool,
}
impl Default for Args {
fn default() -> Self {
Self {
path: ".".to_string(),
unicode: true,
color: false,
no_color: false,
full_path: false,
max_dirs: None,
max_files: None,
show_size: true,
show_lines: false,
dir_sizes: false,
max_file_size: 1_073_741_824, include: None,
exclude: None,
only_dirs: false,
only_files: false,
min_size: None,
max_size: None,
newer_than: None,
older_than: None,
gitignore: false,
all: false,
sort: None,
reverse: false,
search: None,
ignore_case: false,
total_size: false,
dist: None,
top: 10,
format: DistributionFormat::Chart,
depth: None,
output: OutputFormat::Tree,
threads: 0,
follow_symlinks: false,
git_status: false,
verbose: false,
bench: false,
ignore_errors: false,
}
}
}