use crate::commands;
use crate::commands::command::Command;
use crate::config::FnmConfig;
use clap::Parser;
#[derive(clap::Parser, Debug)]
pub enum SubCommand {
#[clap(name = "list-remote", bin_name = "list-remote", visible_aliases = &["ls-remote"])]
LsRemote(commands::ls_remote::LsRemote),
#[clap(name = "list", bin_name = "list", visible_aliases = &["ls"])]
LsLocal(commands::ls_local::LsLocal),
#[clap(name = "install", bin_name = "install")]
Install(commands::install::Install),
#[clap(name = "use", bin_name = "use")]
Use(commands::r#use::Use),
#[clap(name = "env", bin_name = "env")]
Env(commands::env::Env),
#[clap(name = "completions", bin_name = "completions")]
Completions(commands::completions::Completions),
#[clap(name = "alias", bin_name = "alias")]
Alias(commands::alias::Alias),
#[clap(name = "unalias", bin_name = "unalias")]
Unalias(commands::unalias::Unalias),
#[clap(name = "default", bin_name = "default")]
Default(commands::default::Default),
#[clap(name = "current", bin_name = "current")]
Current(commands::current::Current),
#[clap(name = "exec", bin_name = "exec", verbatim_doc_comment)]
Exec(commands::exec::Exec),
#[clap(name = "uninstall", bin_name = "uninstall")]
Uninstall(commands::uninstall::Uninstall),
}
impl SubCommand {
pub fn call(self, config: FnmConfig) {
match self {
Self::LsLocal(cmd) => cmd.call(config),
Self::LsRemote(cmd) => cmd.call(config),
Self::Install(cmd) => cmd.call(config),
Self::Env(cmd) => cmd.call(config),
Self::Use(cmd) => cmd.call(config),
Self::Completions(cmd) => cmd.call(config),
Self::Alias(cmd) => cmd.call(config),
Self::Default(cmd) => cmd.call(config),
Self::Current(cmd) => cmd.call(config),
Self::Exec(cmd) => cmd.call(config),
Self::Uninstall(cmd) => cmd.call(config),
Self::Unalias(cmd) => cmd.call(config),
}
}
}
#[derive(clap::Parser, Debug)]
#[clap(name = "fnm", version = env!("CARGO_PKG_VERSION"), bin_name = "fnm")]
pub struct Cli {
#[clap(flatten)]
pub config: FnmConfig,
#[clap(subcommand)]
pub subcmd: SubCommand,
}
pub fn parse() -> Cli {
Cli::parse()
}