clap_fmt 0.1.1

Serialize a clap arg parser into the command-line arguments.
Documentation
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, // This is the default
        log_level: None,
    };

    let result = cli.to_args();
    assert_eq!(result, Vec::<String>::new());
}

#[test]
fn test_value_enum_all_variants() {
    // Test each color mode
    let cli = CliWithValueEnum {
        color: ColorMode::Never,
        log_level: None,
    };
    let result = cli.to_args();
    assert_eq!(result, vec!["--color", "Never"]);

    // Test each log level
    let cli = CliWithValueEnum {
        color: ColorMode::Auto,
        log_level: Some(LogLevel::Error),
    };
    let result = cli.to_args();
    assert_eq!(result, vec!["--log-level", "Error"]);
}