codanna/cli/commands/
plugin.rs1use crate::cli::PluginAction;
4use crate::config::Settings;
5use crate::plugins;
6
7pub fn run(action: PluginAction, config: &Settings) {
9 let result = match action {
10 PluginAction::Add {
11 marketplace,
12 plugin_name,
13 r#ref,
14 force,
15 dry_run,
16 } => plugins::add_plugin(
17 config,
18 &marketplace,
19 &plugin_name,
20 r#ref.as_deref(),
21 force,
22 dry_run,
23 ),
24 PluginAction::Remove {
25 plugin_name,
26 force,
27 dry_run,
28 } => plugins::remove_plugin(config, &plugin_name, force, dry_run),
29 PluginAction::Update {
30 plugin_name,
31 r#ref,
32 force,
33 dry_run,
34 } => plugins::update_plugin(config, &plugin_name, r#ref.as_deref(), force, dry_run),
35 PluginAction::List { verbose, json } => plugins::list_plugins(config, verbose, json),
36 PluginAction::Verify {
37 plugin_name,
38 all,
39 verbose,
40 } => {
41 if all {
42 plugins::verify_all_plugins(config, verbose)
43 } else {
44 match plugin_name {
45 Some(name) => plugins::verify_plugin(config, &name, verbose),
46 None => {
47 eprintln!("Error: plugin_name is required when --all is not specified");
48 std::process::exit(1);
49 }
50 }
51 }
52 }
53 };
54
55 if let Err(e) = result {
56 use crate::io::exit_code::ExitCode;
57 let code: ExitCode = e.exit_code();
58 eprintln!("Plugin operation failed: {e}");
59 std::process::exit(i32::from(code));
60 }
61}