vouch_lib/extension/commands/
mod.rs

1use super::common;
2use anyhow::Result;
3use structopt::{self, StructOpt};
4
5mod identify_local_dependencies;
6mod registries_package_metadata;
7mod static_data;
8
9#[derive(Debug, StructOpt, Clone)]
10enum Command {
11    /// Get extension static data.
12    #[structopt(name = "static-data")]
13    StaticData,
14
15    /// Identify local dependencies.
16    #[structopt(name = "identify-local-dependencies")]
17    IdentifyLocalDependencies(identify_local_dependencies::Arguments),
18
19    /// Get package metadata from registries.
20    #[structopt(name = "registries-package-metadata")]
21    RegistriesPackageMetadata(registries_package_metadata::Arguments),
22}
23
24fn run_command<T: common::Extension + std::fmt::Debug>(
25    command: Command,
26    extension: &mut T,
27) -> Result<()> {
28    match command {
29        Command::StaticData => {
30            static_data::run_command(extension)?;
31        }
32
33        Command::IdentifyLocalDependencies(args) => {
34            identify_local_dependencies::run_command(&args, extension)?;
35        }
36
37        Command::RegistriesPackageMetadata(args) => {
38            registries_package_metadata::run_command(&args, extension)?;
39        }
40    }
41    Ok(())
42}
43
44#[derive(Debug, StructOpt, Clone)]
45#[structopt(about = "Package Code Reviews")]
46#[structopt(global_setting = structopt::clap::AppSettings::ColoredHelp)]
47#[structopt(global_setting = structopt::clap::AppSettings::DeriveDisplayOrder)]
48struct Opts {
49    #[structopt(subcommand)]
50    pub command: Command,
51}
52
53pub fn run<T: common::Extension + std::fmt::Debug>(extension: &mut T) -> Result<()> {
54    let commands = Opts::from_args();
55    match run_command(commands.command, extension) {
56        Ok(_) => {}
57        Err(e) => {
58            eprintln!("{}", e);
59            std::process::exit(-2)
60        }
61    };
62    Ok(())
63}