use anyhow::Result;
use clap::{Parser, Subcommand};
#[derive(Parser, Debug)]
pub struct RegistryCommand {
#[command(subcommand)]
pub command: RegistryCommands,
}
#[derive(Subcommand, Debug)]
pub enum RegistryCommands {
Init {
#[arg(default_value = ".")]
path: std::path::PathBuf,
},
#[command(alias = "gen-meta")]
GenerateMetadata,
#[command(aliases = ["lint", "audit"])]
Check,
#[command(alias = "add-pkg")]
AddPackage {
name: Option<String>,
#[arg(long, short)]
repo: Option<String>,
},
#[command(alias = "sec")]
AddAdvisory {
package: Option<String>,
#[arg(long, short)]
repo: Option<String>,
},
}
pub fn run(args: RegistryCommand) -> Result<()> {
let registry_root = std::path::Path::new(".");
match args.command {
RegistryCommands::Init { path } => crate::pkg::registry::init(&path),
RegistryCommands::GenerateMetadata => {
crate::pkg::registry::generate_metadata(registry_root)
}
RegistryCommands::Check => crate::pkg::registry::check(registry_root),
RegistryCommands::AddPackage { name, repo } => {
crate::pkg::registry::add_package(registry_root, name.as_deref(), repo.as_deref())
}
RegistryCommands::AddAdvisory { package, repo } => {
crate::pkg::registry::add_advisory(registry_root, package.as_deref(), repo.as_deref())
}
}
}