use clap::{Parser, ValueEnum};
use std::path::PathBuf;
use std::str::FromStr;
use syn_select::Selector;
const VERSION: &str = include_str!(concat!(env!("OUT_DIR"), "/version"));
#[derive(Parser)]
#[command(bin_name = "cargo", version = VERSION, author)]
pub enum Subcommand {
#[command(name = "expand", version = VERSION, author)]
Expand(Expand),
}
#[derive(Parser, Debug)]
pub struct Expand {
#[arg(long, value_name = "FEATURES")]
pub features: Option<String>,
#[arg(long)]
pub all_features: bool,
#[arg(long)]
pub no_default_features: bool,
#[arg(long)]
pub lib: bool,
#[arg(long, value_name = "NAME", num_args = 0..=1)]
pub bin: Option<Option<String>>,
#[arg(long, value_name = "NAME", num_args = 0..=1)]
pub example: Option<Option<String>>,
#[arg(long, value_name = "NAME", num_args = 0..=1)]
pub test: Option<Option<String>>,
#[arg(long)]
pub tests: bool,
#[arg(long, value_name = "NAME", num_args = 0..=1)]
pub bench: Option<Option<String>>,
#[arg(long, value_name = "TARGET")]
pub target: Option<String>,
#[arg(long, value_name = "DIRECTORY")]
pub target_dir: Option<PathBuf>,
#[arg(long, value_name = "PATH")]
pub manifest_path: Option<PathBuf>,
#[arg(short, long, value_name = "SPEC", num_args = 0..=1)]
pub package: Option<Option<String>>,
#[arg(long)]
pub release: bool,
#[arg(long, value_name = "PROFILE-NAME")]
pub profile: Option<String>,
#[arg(short, long, value_name = "N")]
pub jobs: Option<u64>,
#[arg(long)]
pub verbose: bool,
#[arg(long, value_name = "WHEN")]
pub color: Option<Coloring>,
#[arg(long)]
pub frozen: bool,
#[arg(long)]
pub locked: bool,
#[arg(long)]
pub offline: bool,
#[arg(short = 'Z', value_name = "FLAG")]
pub unstable_flags: Vec<String>,
#[arg(long)]
pub ugly: bool,
#[arg(long, value_name = "NAME")]
pub theme: Option<String>,
#[arg(long)]
pub themes: bool,
#[arg(value_name = "ITEM", value_parser = parse_selector)]
pub item: Option<Selector>,
}
#[derive(ValueEnum, Debug, Clone, Copy)]
pub enum Coloring {
Auto,
Always,
Never,
}
fn parse_selector(s: &str) -> Result<Selector, <Selector as FromStr>::Err> {
if s.starts_with("::") {
s[2..].parse()
} else {
s.parse()
}
}
#[test]
fn test_cli() {
<Subcommand as clap::CommandFactory>::command().debug_assert();
}