use clap::{Parser, Subcommand};
use super::help;
use crate::runtime::{EXIT_SUCCESS, ExitCode};
#[derive(Parser, Default)]
#[command(
name = "plugin",
about = "Manage plugins and extensions",
color = clap::ColorChoice::Auto
)]
pub struct PluginArgs {
#[command(subcommand)]
pub command: Option<PluginCommands>,
}
#[derive(Subcommand)]
pub enum PluginCommands {
List,
Install {
source: String,
#[arg(long)]
trust: bool,
#[arg(short, long)]
global: bool,
#[arg(short, long)]
force: bool,
},
Remove {
name: String,
#[arg(short, long)]
global: bool,
},
Update {
name: Option<String>,
#[arg(long)]
all: bool,
},
Enable {
name: String,
},
Disable {
name: String,
},
}
pub fn handle(args: &PluginArgs) -> ExitCode {
let Some(cmd) = &args.command else {
return help::print_subcommand_help::<PluginArgs>();
};
match cmd {
PluginCommands::List => {
help::unimplemented("Plugin list — not yet implemented");
EXIT_SUCCESS
}
PluginCommands::Install {
source,
trust,
global,
force,
} => {
help::unimplemented(&format!(
"Plugin install — not yet implemented (source: {source}, trust: {trust}, global: {global}, force: {force})"
));
EXIT_SUCCESS
}
PluginCommands::Remove { name, global } => {
help::unimplemented(&format!(
"Plugin remove — not yet implemented (name: {name}, global: {global})"
));
EXIT_SUCCESS
}
PluginCommands::Update { name, all } => {
help::unimplemented(&format!(
"Plugin update — not yet implemented (name: {}, all: {all})",
name.as_deref().unwrap_or("<none>")
));
EXIT_SUCCESS
}
PluginCommands::Enable { name } => {
help::unimplemented(&format!("Plugin enable — not yet implemented (name: {name})"));
EXIT_SUCCESS
}
PluginCommands::Disable { name } => {
help::unimplemented(&format!("Plugin disable — not yet implemented (name: {name})"));
EXIT_SUCCESS
}
}
}