cargo-worktree 1.0.0

Deterministic build namespace layer for Cargo
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 the resolved namespace and target directory
    Inspect,
    /// Build with worktree-isolated target output
    Build {
        #[arg(trailing_var_arg = true)]
        args: Vec<String>,
    },

    /// Test with worktree-isolated target output
    Test {
        #[arg(trailing_var_arg = true)]
        args: Vec<String>,
    },

    /// Run with worktree-isolated target output
    Run {
        #[arg(trailing_var_arg = true)]
        args: Vec<String>,
    },

    /// Check with worktree-isolated target output
    Check {
        #[arg(trailing_var_arg = true)]
        args: Vec<String>,
    },

    /// Run Clippy with worktree-isolated target output
    Clippy {
        #[arg(trailing_var_arg = true)]
        args: Vec<String>,
    },

    /// Benchmarks with worktree-isolated target output
    Bench {
        #[arg(trailing_var_arg = true)]
        args: Vec<String>,
    },

    /// Fmt with worktree-isolated target output
    Fmt {
        #[arg(trailing_var_arg = true)]
        args: Vec<String>,
    },

    /// Clean with worktree-isolated target output
    Clean {
        #[arg(trailing_var_arg = true)]
        args: Vec<String>,
    },

    /// Install a binary package with worktree-isolated target output
    Install {
        #[arg(trailing_var_arg = true)]
        args: Vec<String>,
    },

    /// Uninstall a binary package with worktree-isolated target output
    Uninstall {
        #[arg(trailing_var_arg = true)]
        args: Vec<String>,
    },

    /// Display the dependency tree with worktree-isolated target output
    Tree {
        #[arg(trailing_var_arg = true)]
        args: Vec<String>,
    },

    /// Update dependencies in.lock with worktree-isolated target output
    Update {
        #[arg(trailing_var_arg = true)]
        args: Vec<String>,
    },

    /// Any other subcommand with worktree-isolated target output
    #[command(external_subcommand)]
    Other(Vec<String>),
}