clap_fmt 0.1.1

Serialize a clap arg parser into the command-line arguments.
Documentation
use clap::Parser;
use clap_fmt::FmtArgs;
use serde::Serialize;

#[derive(Parser, Debug, Serialize)]
#[command(name = "myapp")]
struct SimpleArgs {
    #[arg(short, long)]
    verbose: bool,

    #[arg(short, long)]
    quiet: bool,

    #[arg(short, long)]
    output: Option<String>,

    #[arg(short, long, default_value = "input.txt")]
    input: String,

    #[arg(short = 'd', long = "debug", action = clap::ArgAction::Count)]
    debug: u8,

    files: Vec<String>,
}

#[test]
fn test_bool_flags() {
    let args = SimpleArgs {
        verbose: true,
        quiet: false,
        output: None,
        input: "input.txt".to_string(),
        debug: 0,
        files: vec![],
    };

    let result = args.to_args();
    assert_eq!(result, vec!["--verbose"]);
}

#[test]
fn test_option_values() {
    let args = SimpleArgs {
        verbose: false,
        quiet: true,
        output: Some("output.log".to_string()),
        input: "custom.txt".to_string(),
        debug: 0,
        files: vec![],
    };

    let result = args.to_args();
    assert_eq!(result, vec!["--quiet", "--output", "output.log", "--input", "custom.txt"]);
}

#[test]
fn test_count_flags() {
    let args = SimpleArgs {
        verbose: false,
        quiet: false,
        output: None,
        input: "input.txt".to_string(),
        debug: 3,
        files: vec![],
    };

    let result = args.to_args();
    assert_eq!(result, vec!["-ddd"]);
}

#[test]
fn test_positional_args() {
    let args = SimpleArgs {
        verbose: false,
        quiet: false,
        output: None,
        input: "input.txt".to_string(),
        debug: 0,
        files: vec!["file1.txt".to_string(), "file2.txt".to_string()],
    };

    let result = args.to_args();
    assert_eq!(result, vec!["file1.txt", "file2.txt"]);
}

#[test]
fn test_with_program() {
    let args = SimpleArgs {
        verbose: true,
        quiet: false,
        output: Some("out.txt".to_string()),
        input: "in.txt".to_string(),
        debug: 1,
        files: vec!["test.txt".to_string()],
    };

    let result = args.to_args_with_program("myapp");
    assert_eq!(result, vec!["myapp", "--verbose", "--output", "out.txt", "--input", "in.txt", "-d", "test.txt"]);
}

#[test]
fn test_complex_scenario() {
    let args = SimpleArgs {
        verbose: true,
        quiet: false,
        output: Some("results.json".to_string()),
        input: "data.csv".to_string(),
        debug: 2,
        files: vec!["file1.rs".to_string(), "file2.rs".to_string()],
    };

    let result = args.to_args();
    assert_eq!(result, vec!["--verbose", "--output", "results.json", "--input", "data.csv", "-dd", "file1.rs", "file2.rs"]);
}