use clap::Args;
use std::path::PathBuf;
#[derive(Args)]
pub struct InitArgs {
#[arg(short, long)]
name: Option<String>,
#[arg(short, long)]
dir: Option<PathBuf>,
#[arg(short, long, default_value = "minimal")]
template: String,
#[arg(short, long)]
force: bool,
}
#[derive(Args)]
pub struct InstallArgs {
#[arg(long)]
local_only: bool,
#[arg(short, long)]
force: bool,
#[arg(short, long)]
verbose: bool,
}
pub enum InitInstallArgs {
Init(InitArgs),
Install(InstallArgs),
}
pub fn run(args: InitInstallArgs) -> anyhow::Result<()> {
match args {
InitInstallArgs::Install(install_args) => {
println!("Install command: local_only={}, force={}, verbose={}",
install_args.local_only, install_args.force, install_args.verbose);
Ok(())
}
InitInstallArgs::Init(init_args) => {
let name = init_args.name.unwrap_or_else(|| String::from(""));
let dir = init_args.dir.unwrap_or_else(|| PathBuf::from("."));
let template = init_args.template;
let force = init_args.force;
println!("Init command: name={}, dir={}, template={}, force={}",
name, dir.display(), template, force);
Ok(())
}
}
}