use clap::builder::PossibleValuesParser;
use clap::{Args, Parser, Subcommand};
use crate::*;
#[derive(Debug, Parser)]
#[command(name = BUILD_CI_BIN_NAME, author, version)]
pub struct BuildArgs {
#[arg(long = "skip", value_delimiter = ' ', value_name = "CRATES")]
pub skip_crates: Option<Vec<String>>,
#[arg(long)]
pub debug: bool,
#[arg(value_name = "CARGO_BUILD_ARGS", raw = true)]
pub cargo_args: Vec<String>,
#[arg(
long = "log",
default_value = "warn",
value_parser = PossibleValuesParser::new(["trace", "debug", "info", "warn", "error"]),
value_name = "LEVEL",
global = true,
)]
pub log_level: String,
}
#[derive(Debug, Parser)]
#[command(name = RUN_CI_BIN_NAME, author, version, trailing_var_arg = true)]
pub struct RunArgs {
#[arg(long = "bin", value_name = "NAME")]
pub binary_name: Option<String>,
#[arg(raw = true, value_name = "ARGS")]
pub binary_args: Vec<String>,
#[arg(value_name = "CARGO_RUN_ARGS", raw = true)]
pub cargo_args: Vec<String>,
#[arg(
long = "log",
default_value = "warn",
value_parser = PossibleValuesParser::new(["trace", "debug", "info", "warn", "error"]),
value_name = "LEVEL",
global = true,
)]
pub log_level: String,
}
#[derive(Debug, Parser)]
#[command(name = LIB_CI_BIN_NAME, author, version)]
pub struct LibraryArgs {
#[command(subcommand)]
pub command: Option<LibrarySubcommands>,
#[arg(
long = "log",
default_value = "warn",
value_parser = PossibleValuesParser::new(["trace", "debug", "info", "warn", "error"]),
value_name = "LEVEL",
global = true,
)]
pub log_level: String,
}
#[derive(Debug, Subcommand)]
pub enum LibrarySubcommands {
Install(InstallArgs),
Uninstall,
Update,
Config(ConfigArgs),
}
#[derive(Args, Debug)]
pub struct InstallArgs {
#[arg(long, value_name = "PATH")]
pub path: Option<String>,
#[arg(long, value_name = "URL")]
pub url: Option<String>,
}
#[derive(Args, Debug)]
pub struct ConfigArgs {
#[arg(
long,
allow_hyphen_values = true,
use_value_delimiter = true,
value_delimiter = ' ',
value_name = "ARGS"
)]
pub library_args: Option<Vec<String>>,
}