1use anyhow::Result;
2use clap::{Parser, Subcommand};
3
4#[derive(Parser, Debug)]
5pub struct RegistryCommand {
6 #[command(subcommand)]
7 pub command: RegistryCommands,
8}
9
10#[derive(Subcommand, Debug)]
11pub enum RegistryCommands {
12 Init {
14 #[arg(default_value = ".")]
16 path: std::path::PathBuf,
17 },
18 #[command(alias = "gen-meta")]
20 GenerateMetadata,
21 #[command(aliases = ["lint", "audit"])]
23 Check,
24 #[command(alias = "add-pkg")]
26 AddPackage {
27 name: Option<String>,
29 #[arg(long, short)]
31 repo: Option<String>,
32 },
33 #[command(alias = "sec")]
35 AddAdvisory {
36 package: Option<String>,
38 #[arg(long, short)]
40 repo: Option<String>,
41 },
42}
43
44pub fn run(args: RegistryCommand) -> Result<()> {
45 let registry_root = std::path::Path::new(".");
46 match args.command {
47 RegistryCommands::Init { path } => crate::pkg::registry::init(&path),
48 RegistryCommands::GenerateMetadata => {
49 crate::pkg::registry::generate_metadata(registry_root)
50 }
51 RegistryCommands::Check => crate::pkg::registry::check(registry_root),
52 RegistryCommands::AddPackage { name, repo } => {
53 crate::pkg::registry::add_package(registry_root, name.as_deref(), repo.as_deref())
54 }
55 RegistryCommands::AddAdvisory { package, repo } => {
56 crate::pkg::registry::add_advisory(registry_root, package.as_deref(), repo.as_deref())
57 }
58 }
59}