diff --git a/Cargo.toml b/Cargo.toml index cbf43b6..eb17f79 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,3 +8,6 @@ alphanumeric-sort = "1.5.3" clap = { version = "4.5.23", features = ["derive"] } clap_complete = "4.5.40" yaml-rust2 = "0.9.0" + +[profile.release] +opt-level = 3 diff --git a/src/cli.rs b/src/cli.rs index bf62a68..0a8b8fd 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -9,15 +9,40 @@ pub struct Cli { #[derive(Subcommand, Debug)] pub enum Commands { - ///Generate bash completions - GenerateBashCompletions, - ///Generate zsh completions - GenerateZshCompletions, - ///Generate fish completions - GenerateFishCompletions, + ///Generate shell completions + GenCompletion { + #[command(subcommand)] + shell: ShellCommands, + }, ///Runs it Run { #[arg(short, long)] config: String, + #[arg(short, long)] + daemonize: bool, + }, +} + +#[derive(Subcommand, Debug)] +pub enum ShellCommands { + Bash { + #[arg(short, long, default_value = "gregory")] + binary_name: String, + }, + Zsh { + #[arg(short, long, default_value = "gregory")] + binary_name: String, + }, + Fish { + #[arg(short, long, default_value = "gregory")] + binary_name: String, + }, + Elvish { + #[arg(short, long, default_value = "gregory")] + binary_name: String, + }, + PowerShell { + #[arg(short, long, default_value = "gregory")] + binary_name: String, }, } diff --git a/src/main.rs b/src/main.rs index 7e1a4f8..8808c95 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,7 @@ -use crate::cli::Commands; use crate::cli::*; use alphanumeric_sort::sort_str_slice; use clap::{CommandFactory, Parser}; -use clap_complete::aot::{generate, Bash, Fish, Zsh}; +use clap_complete::aot::{generate, Bash, Elvish, Fish, PowerShell, Zsh}; use std::fs; use std::io::stdout; use yaml_rust2::YamlLoader; @@ -13,31 +12,27 @@ fn main() { let cli = Cli::parse(); match cli.command { - Commands::GenerateBashCompletions => { - generate( - Bash, - &mut Cli::command(), - "gregory", - &mut stdout(), - ); + Commands::GenCompletion { shell } => match shell { + ShellCommands::Bash { binary_name } => { + generate(Bash, &mut Cli::command(), binary_name, &mut stdout()); + } + ShellCommands::Zsh { binary_name } => { + generate(Zsh, &mut Cli::command(), binary_name, &mut stdout()); + } + ShellCommands::Fish { binary_name } => { + generate(Fish, &mut Cli::command(), binary_name, &mut stdout()); + } + ShellCommands::Elvish { binary_name } => { + generate(Elvish, &mut Cli::command(), binary_name, &mut stdout()); + } + ShellCommands::PowerShell { binary_name } => { + generate(PowerShell, &mut Cli::command(), binary_name, &mut stdout()); + } + }, + Commands::Run { config, daemonize } => { + println!("{}", config); + println!("{}", daemonize) } - Commands::GenerateZshCompletions => { - generate( - Zsh, - &mut Cli::command(), - "gregory", - &mut stdout(), - ); - } - Commands::GenerateFishCompletions => { - generate( - Fish, - &mut Cli::command(), - "gregory", - &mut stdout(), - ); - } - Commands::Run => {} } }