use clap::{Args, Parser, Subcommand};
use std::path::PathBuf;
#[derive(Debug, Parser)]
#[command(
name = "cargo",
bin_name = "cargo",
version,
about = "Package Cargo binaries and their Linux runtime closures"
)]
pub(crate) struct Cli {
#[command(subcommand)]
pub(crate) command: CargoCommand,
#[arg(short, long, global = true)]
pub(crate) quiet: bool,
#[arg(short, long, global = true, action = clap::ArgAction::Count)]
pub(crate) verbose: u8,
}
#[derive(Debug, Subcommand)]
pub(crate) enum CargoCommand {
Elfpak(ElfpakArgs),
}
#[derive(Debug, Args)]
pub(crate) struct ElfpakArgs {
#[command(subcommand)]
pub(crate) command: Command,
}
#[derive(Debug, Subcommand)]
pub(crate) enum Command {
Bundle(CargoBundleArgs),
}
#[derive(Debug, Args)]
pub(crate) struct CargoBundleArgs {
#[arg(
short = 'p',
long = "package",
value_name = "PACKAGE",
conflicts_with = "all"
)]
pub(crate) package: Option<String>,
#[arg(
long = "bin",
value_name = "NAME",
conflicts_with_all = ["bins", "all_bins", "all"]
)]
pub(crate) bin: Option<String>,
#[arg(
long = "bins",
value_name = "NAMES",
value_delimiter = ',',
action = clap::ArgAction::Append,
conflicts_with_all = ["bin", "all_bins", "all"]
)]
pub(crate) bins: Vec<String>,
#[arg(long, conflicts_with_all = ["bin", "bins", "all"])]
pub(crate) all_bins: bool,
#[arg(
long,
conflicts_with_all = ["package", "bin", "bins", "all_bins"]
)]
pub(crate) all: bool,
#[arg(long, conflicts_with = "profile")]
pub(crate) release: bool,
#[arg(long, value_name = "NAME")]
pub(crate) profile: Option<String>,
#[arg(long, value_name = "TRIPLE")]
pub(crate) target: Option<String>,
#[arg(long, value_name = "DIR")]
pub(crate) target_dir: Option<PathBuf>,
#[arg(long, value_name = "PATH")]
pub(crate) manifest_path: Option<PathBuf>,
#[arg(long, value_name = "FEATURES", action = clap::ArgAction::Append)]
pub(crate) features: Vec<String>,
#[arg(long)]
pub(crate) all_features: bool,
#[arg(long)]
pub(crate) no_default_features: bool,
#[arg(long)]
pub(crate) locked: bool,
#[arg(long)]
pub(crate) offline: bool,
#[arg(long)]
pub(crate) frozen: bool,
#[command(flatten)]
pub(crate) bundle: elfpak::BundleArgs,
}