use clap::{Parser, ValueEnum};
use clap_fmt::FmtArgs;
use serde::Serialize;
#[derive(Debug, Clone, Serialize, ValueEnum)]
enum ColorMode {
Auto,
Always,
Never,
}
#[derive(Debug, Clone, Serialize, ValueEnum)]
enum LogLevel {
Debug,
Info,
Warn,
Error,
}
#[derive(Parser, Debug, Serialize)]
struct CliWithValueEnum {
#[arg(long, value_enum, default_value = "auto")]
color: ColorMode,
#[arg(long, value_enum)]
log_level: Option<LogLevel>,
}
#[test]
fn test_value_enum() {
let cli = CliWithValueEnum {
color: ColorMode::Always,
log_level: Some(LogLevel::Debug),
};
let result = cli.to_args();
assert_eq!(result, vec!["--color", "Always", "--log-level", "Debug"]);
}
#[test]
fn test_value_enum_default_not_included() {
let cli = CliWithValueEnum {
color: ColorMode::Auto, log_level: None,
};
let result = cli.to_args();
assert_eq!(result, Vec::<String>::new());
}
#[test]
fn test_value_enum_all_variants() {
let cli = CliWithValueEnum {
color: ColorMode::Never,
log_level: None,
};
let result = cli.to_args();
assert_eq!(result, vec!["--color", "Never"]);
let cli = CliWithValueEnum {
color: ColorMode::Auto,
log_level: Some(LogLevel::Error),
};
let result = cli.to_args();
assert_eq!(result, vec!["--log-level", "Error"]);
}