use clap::{Args, Parser, Subcommand};
use std::path::PathBuf;
#[derive(Debug, Parser)]
#[command(
name = "cargo",
bin_name = "cargo",
version,
about = "Package a Cargo binary and its Linux runtime closure"
)]
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")]
pub(crate) package: Option<String>,
#[arg(long = "bin", value_name = "NAME")]
pub(crate) bin: Option<String>,
#[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,
}