use clap::{ArgAction, Parser, ValueEnum};
#[derive(Debug, Clone, Copy, ValueEnum)]
pub enum Method {
#[value(name = "1")]
Walkdir = 1,
#[value(name = "2")]
Recursive = 2,
}
#[derive(Parser, Debug)]
#[command(
name = "fsearch",
bin_name = "fsearch",
version,
about = "⚡ Fast file and content search utility",
long_about = "⚡ fsearch — blazingly fast, cross-platform file & content search\n\n\
Search for filenames or text inside files with rich coloured output,\n\
depth control, glob filters, parallel execution and a config file.",
author = "Hadi Cahyadi <cumulus13@gmail.com>",
after_help = "EXAMPLES:\n\
\n # Find Python files\n fsearch '*.py'\
\n\n # Find 'TODO' inside source files (depth 5)\n fsearch TODO -f -i '*.py,*.rs' -d 5\
\n\n # Case-sensitive search\n fsearch README -C\
\n\n # Initialise a default config file\n fsearch --init-config\n"
)]
pub struct Cli {
#[arg(value_name = "PATTERN", required_unless_present_any = ["init_config", "show_config"])]
pub pattern: Option<String>,
#[arg(short = 'm', long, value_name = "METHOD", default_value = "1")]
pub method: Method,
#[arg(short = 'c', long = "case-insensitive", action = ArgAction::SetTrue)]
pub case_insensitive: bool,
#[arg(short = 'C', long = "case-sensitive", action = ArgAction::SetTrue)]
pub case_sensitive: bool,
#[arg(short = 'd', long = "deep", value_name = "DEPTH", default_value = "1")]
pub depth: u32,
#[arg(short = 'p', long, value_name = "PATH")]
pub path: Option<String>,
#[arg(short = 'D', long = "no-dir", action = ArgAction::SetTrue)]
pub no_dir: bool,
#[arg(short = 'f', long = "file", action = ArgAction::SetTrue)]
pub search_in_files: bool,
#[arg(short = 'i', long, value_name = "PATTERNS", default_value = "")]
pub include: String,
#[arg(short = 'x', long, value_name = "DIRS", default_value = "")]
pub exclude: String,
#[arg(short = 'n', long, value_name = "N", default_value = "0")]
pub max_results: usize,
#[arg(short = 'v', long, action = ArgAction::SetTrue)]
pub verbose: bool,
#[arg(long = "init-config", action = ArgAction::SetTrue)]
pub init_config: bool,
#[arg(long = "show-config", action = ArgAction::SetTrue)]
pub show_config: bool,
}