Skip to main content

thirdpass_core/extension/commands/
mod.rs

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