use crate::engine::hysp_ui::show_splashes;
use clap::{Args, Parser, Subcommand, ValueEnum};
#[derive(Parser)]
#[command(author, version, about = show_splashes(), long_about = show_splashes())]
#[command(propagate_version = true)]
#[command(arg_required_else_help = true)]
pub struct Cli {
#[clap(subcommand)]
pub command: CommandChoice,
}
#[derive(Subcommand)]
pub enum CommandChoice {
#[command(arg_required_else_help = true)]
#[clap(name = "install", visible_alias = "i")]
Install(InstallArgs),
#[command(arg_required_else_help = true)]
#[clap(name = "remove", visible_alias = "r")]
Remove(RemoveArgs),
#[command(arg_required_else_help = true)]
#[clap(name = "search", visible_alias = "s")]
Search(SearchArgs),
#[clap(name = "list", visible_alias = "l")]
List(ListArgs),
#[clap(name = "health", visible_alias = "h")]
Health,
#[clap(name = "query", visible_alias = "q")]
Query(QueryArgs),
}
#[derive(Args, Clone)]
pub struct InstallArgs {
#[arg(short,long,num_args(0..=100))] #[arg(required = true)]
pub packages: Vec<String>,
#[arg(long)]
#[arg(required = false)]
pub force: bool,
#[arg(long, required = false)]
pub quiet: bool,
}
#[derive(Args, Clone)]
pub struct RemoveArgs {
#[arg(short,long,num_args(0..=100))]
#[arg(required = true)]
pub packages: Vec<String>,
#[arg(long, required = false)]
pub force: bool,
#[arg(long, required = false)]
pub quiet: bool,
}
#[derive(Args, Clone)]
#[command(arg_required_else_help = true)]
pub struct SearchArgs {
#[arg(short, long)]
#[arg(required = true)]
pub package: String,
#[arg(long, value_enum, default_value = "raw")]
pub mode: Modes,
#[arg(long, default_value = "4")]
pub limit: u16,
}
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum)]
#[allow(non_camel_case_types)]
pub enum Modes {
raw,
database,
fuzzy, }
#[derive(Args, Clone)]
#[command(arg_required_else_help = true)]
pub struct ListArgs {
#[arg(long, required = false, conflicts_with = "installed")]
pub available: bool,
#[arg(long, required = false)]
pub installed: bool,
#[arg(long, required = false)]
pub verbose: bool,
}
#[derive(Args, Clone)]
#[command(arg_required_else_help = true)]
pub struct QueryArgs {
#[arg(long, required = false)]
pub print_default_config: bool,
#[arg(long, required = false)]
pub print_example_package: bool,
}