use clap::{Parser, Subcommand, ValueEnum}; use wfassoc::Scope; #[derive(Debug, Clone, ValueEnum)] pub enum Target { #[value(name = "user")] User, #[value(name = "system")] System, } impl From for Scope { fn from(target: Target) -> Self { match target { Target::User => Scope::User, Target::System => Scope::System, } } } /// Simple program to manage Windows file associations #[derive(Parser)] #[command(name = "Windows File Association Operator", version, about)] pub struct Cli { /// The TOML file representing the complete program #[arg( short = 'c', long = "config", value_name = "PROG_CONFIG", required = true )] pub(crate) config_file: String, #[command(subcommand)] pub(crate) command: Commands, } #[derive(Subcommand)] pub enum Commands { /// Register the program #[command(name = "register")] #[command(about = "Register application with given manifest and scope.")] Register { /// The scope where wfassoc operate #[arg(short = 't', long = "target", value_name = "TARGET", value_enum, default_value_t = Target::User)] target: Target, }, /// Unregister the program #[command(name = "unregister")] #[command(about = "Unregister application with given manifest and scope.")] Unregister { /// The scope where wfassoc operate #[arg(short = 't', long = "target", value_name = "TARGET", value_enum, default_value_t = Target::User)] target: Target, }, /// Query file associations #[command(name = "query")] #[command(about = "Query file extensions association infos according toh given manifest represented application.")] Query, }