use clap::{Parser, ValueEnum};
use std::path::PathBuf;
#[derive(Parser, Clone, Debug)]
#[command(
name = "rskill",
about = "Find and clean Rust project build artifacts and caches",
version = "0.1.0"
)]
pub struct Cli {
#[arg(short, long, default_value = ".")]
pub directory: PathBuf,
#[arg(short = 'f', long)]
pub full: bool,
#[arg(short, long, default_value = "target")]
pub target: String,
#[arg(short, long, value_enum, default_value = "size")]
pub sort: SortBy,
#[arg(long)]
pub gb: bool,
#[arg(short = 'E', long)]
pub exclude: Option<String>,
#[arg(short = 'x', long)]
pub exclude_hidden: bool,
#[arg(short = 'e', long)]
pub hide_errors: bool,
#[arg(short = 'D', long)]
pub delete_all: bool,
#[arg(long)]
pub dry_run: bool,
#[arg(short, long)]
pub list_only: bool,
#[arg(long)]
pub include_cargo_cache: bool,
#[arg(short = 'c', long, value_enum, default_value = "blue")]
pub color: Color,
#[arg(long)]
pub no_check_update: bool,
}
#[derive(ValueEnum, Clone, Debug)]
pub enum SortBy {
Size,
Path,
LastMod,
}
#[derive(ValueEnum, Clone, Debug)]
pub enum Color {
Blue,
Cyan,
Magenta,
White,
Red,
Yellow,
}
impl Cli {
pub fn get_search_directory(&self) -> PathBuf {
if self.full {
dirs::home_dir().unwrap_or_else(|| PathBuf::from("/"))
} else {
self.directory.clone()
}
}
pub fn get_excluded_dirs(&self) -> Vec<String> {
self.exclude
.as_ref()
.map(|s| {
s.split(',')
.map(|dir| dir.trim().to_string())
.collect()
})
.unwrap_or_default()
}
}