helix/dna/cmd/
map.rs

1
2use clap::{Args, Subcommand, ValueEnum};
3use std::path::PathBuf;
4
5#[derive(Args, Debug)]
6pub struct MaintenanceArgs {
7    #[command(subcommand)]
8    pub command: MaintenanceCommand,
9}
10
11#[derive(Subcommand, Debug)]
12pub enum MaintenanceCommand {
13    /// Publish the package to a registry
14    Publish(PublishArgs),
15    /// Sign the package or artifact
16    Sign(SignArgs),
17    /// Export the package in a specific format
18    Export(ExportArgs),
19    /// Import a package from a registry
20    Import(ImportArgs),
21}
22
23#[derive(Args, Debug)]
24pub struct PublishArgs {
25    #[arg(short, long)]
26    pub registry: Option<String>,
27    #[arg(short, long)]
28    pub token: Option<String>,
29    #[arg(long)]
30    pub dry_run: bool,
31}
32
33#[derive(Args, Debug)]
34pub struct SignArgs {
35    pub input: PathBuf,
36    #[arg(short, long)]
37    pub key: Option<String>,
38    #[arg(short, long)]
39    pub output: Option<PathBuf>,
40    #[arg(long)]
41    pub verify: bool,
42}
43
44#[derive(ValueEnum, Clone, Debug)]
45pub enum ExportFormat {
46    Json,
47    Yaml,
48    Toml,
49}
50
51#[derive(Args, Debug)]
52pub struct ExportArgs {
53    #[arg(value_enum)]
54    pub format: ExportFormat,
55    #[arg(short, long)]
56    pub output: Option<PathBuf>,
57    #[arg(long)]
58    pub include_deps: bool,
59}
60
61#[derive(Args, Debug)]
62pub struct ImportArgs {
63    #[arg(short, long)]
64    pub input: PathBuf,
65    #[arg(short, long)]
66    pub registry: Option<String>,
67    #[arg(short, long)]
68    pub token: Option<String>,
69}
70
71pub async fn run(args: MaintenanceArgs) -> anyhow::Result<()> {
72    match args.command {
73        MaintenanceCommand::Publish(ref publish_args) => {
74            println!("Publish: registry={:?}, token={:?}, dry_run={}",
75                     publish_args.registry, publish_args.token, publish_args.dry_run);
76            Ok(())
77        }
78        MaintenanceCommand::Sign(ref sign_args) => {
79            println!("Sign: input={}, key={:?}, output={:?}, verify={}",
80                     sign_args.input.display(),
81                     sign_args.key,
82                     sign_args.output,
83                     sign_args.verify);
84            Ok(())
85        }
86        MaintenanceCommand::Export(ref export_args) => {
87            println!("Export: format={:?}, output={:?}, include_deps={}",
88                     export_args.format, export_args.output, export_args.include_deps);
89            Ok(())
90        }
91        MaintenanceCommand::Import(ref import_args) => {
92            println!("Import: input={}, registry={:?}, token={:?}",
93                     import_args.input.display(), import_args.registry, import_args.token);
94            Ok(())
95        }
96    }
97}