use clap::{Parser, Subcommand};
#[derive(Parser, Debug)]
#[command(
name = "cargo-worktree",
bin_name = "cargo-worktree",
about = "Unified Cargo wrapper for git worktrees",
long_about = "Unified Cargo wrapper for git worktrees.\n\n\
It isolates Cargo target output by current branch or commit when inside a git repository, and falls back to Cargo's default target/ when not inside git.\n\n\
Use it like cargo, for example: cargo worktree build, cargo worktree test -- --nocapture, cargo worktree check, cargo worktree clippy, cargo worktree bench, cargo worktree fmt and etc."
)]
pub struct Cli {
#[command(subcommand)]
pub command: Command,
}
#[derive(Subcommand, Debug)]
pub enum Command {
Inspect,
Build {
#[arg(trailing_var_arg = true)]
args: Vec<String>,
},
Test {
#[arg(trailing_var_arg = true)]
args: Vec<String>,
},
Run {
#[arg(trailing_var_arg = true)]
args: Vec<String>,
},
Check {
#[arg(trailing_var_arg = true)]
args: Vec<String>,
},
Clippy {
#[arg(trailing_var_arg = true)]
args: Vec<String>,
},
Bench {
#[arg(trailing_var_arg = true)]
args: Vec<String>,
},
Fmt {
#[arg(trailing_var_arg = true)]
args: Vec<String>,
},
Clean {
#[arg(trailing_var_arg = true)]
args: Vec<String>,
},
Install {
#[arg(trailing_var_arg = true)]
args: Vec<String>,
},
Uninstall {
#[arg(trailing_var_arg = true)]
args: Vec<String>,
},
Tree {
#[arg(trailing_var_arg = true)]
args: Vec<String>,
},
Update {
#[arg(trailing_var_arg = true)]
args: Vec<String>,
},
#[command(external_subcommand)]
Other(Vec<String>),
}