use clap::{Args, Parser, Subcommand, crate_authors, crate_description, crate_version};
use getset::Getters;
use std::path::PathBuf;
#[derive(Debug, Parser)]
#[command(name = "cargo")]
#[command(bin_name = "cargo")]
pub(crate) enum Cargo {
Matrix(MatrixArgs),
}
#[derive(Args, Debug, Getters)]
#[clap(
author = crate_authors!(),
version = crate_version!(),
about = crate_description!(),
)]
#[command(version, about, long_about = None)]
#[getset(get = "pub(crate)")]
pub(crate) struct MatrixArgs {
#[clap(long, short)]
channel: Option<String>,
#[clap(long)]
dry_run: bool,
#[arg(long)]
manifest_path: Option<PathBuf>,
#[arg(long, short)]
package: Option<String>,
#[arg(
long,
default_value_t = 1,
requires = "chunk",
help = "Split the workspace into n chunks, each chunk containing a roughly equal number of crates"
)]
num_chunks: usize,
#[arg(
long,
default_value_t = 1,
requires = "num_chunks",
help = "Which chunk to test, indexed at 1"
)]
chunk: usize,
#[command(subcommand)]
command: CargoSubcommands,
}
#[derive(Debug, Subcommand)]
pub(crate) enum CargoSubcommands {
Build(VarArgs),
Check(VarArgs),
Clippy(VarArgs),
Test(VarArgs),
LlvmCov(VarArgs),
}
#[derive(Args, Debug, Getters)]
#[getset(get = "pub(crate)")]
pub(crate) struct VarArgs {
#[clap(trailing_var_arg = true, allow_hyphen_values = true)]
args: Vec<String>,
}