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(PublishArgs),
15 Sign(SignArgs),
17 Export(ExportArgs),
19 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}