use clap::{Args, Subcommand, ValueEnum};
use std::path::PathBuf;
#[derive(Args, Debug)]
pub struct MaintenanceArgs {
#[command(subcommand)]
pub command: MaintenanceCommand,
}
#[derive(Subcommand, Debug)]
pub enum MaintenanceCommand {
Publish(PublishArgs),
Sign(SignArgs),
Export(ExportArgs),
Import(ImportArgs),
}
#[derive(Args, Debug)]
pub struct PublishArgs {
#[arg(short, long)]
pub registry: Option<String>,
#[arg(short, long)]
pub token: Option<String>,
#[arg(long)]
pub dry_run: bool,
}
#[derive(Args, Debug)]
pub struct SignArgs {
pub input: PathBuf,
#[arg(short, long)]
pub key: Option<String>,
#[arg(short, long)]
pub output: Option<PathBuf>,
#[arg(long)]
pub verify: bool,
}
#[derive(ValueEnum, Clone, Debug)]
pub enum ExportFormat {
Json,
Yaml,
Toml,
}
#[derive(Args, Debug)]
pub struct ExportArgs {
#[arg(value_enum)]
pub format: ExportFormat,
#[arg(short, long)]
pub output: Option<PathBuf>,
#[arg(long)]
pub include_deps: bool,
}
#[derive(Args, Debug)]
pub struct ImportArgs {
#[arg(short, long)]
pub input: PathBuf,
#[arg(short, long)]
pub registry: Option<String>,
#[arg(short, long)]
pub token: Option<String>,
}
pub async fn run(args: MaintenanceArgs) -> anyhow::Result<()> {
match args.command {
MaintenanceCommand::Publish(ref publish_args) => {
println!("Publish: registry={:?}, token={:?}, dry_run={}",
publish_args.registry, publish_args.token, publish_args.dry_run);
Ok(())
}
MaintenanceCommand::Sign(ref sign_args) => {
println!("Sign: input={}, key={:?}, output={:?}, verify={}",
sign_args.input.display(),
sign_args.key,
sign_args.output,
sign_args.verify);
Ok(())
}
MaintenanceCommand::Export(ref export_args) => {
println!("Export: format={:?}, output={:?}, include_deps={}",
export_args.format, export_args.output, export_args.include_deps);
Ok(())
}
MaintenanceCommand::Import(ref import_args) => {
println!("Import: input={}, registry={:?}, token={:?}",
import_args.input.display(), import_args.registry, import_args.token);
Ok(())
}
}
}