clap_fmt 0.1.1

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

#[derive(Parser, Debug, Serialize)]
#[command(name = "basic")]
#[command(about = "A basic example of clap_fmt", long_about = None)]
struct Args {
    /// Enable verbose output
    #[arg(short, long)]
    verbose: bool,

    /// Output file path
    #[arg(short, long, value_name = "FILE")]
    output: Option<String>,

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

    /// Files to process
    #[arg(value_name = "FILES")]
    files: Vec<String>,
}

fn main() {
    println!("=== Basic clap_fmt Example ===\n");
    println!(
        "This library automatically converts clap Parser structs back to command-line arguments!"
    );
    println!("No manual implementation required - just derive Parser and Serialize!\n");

    // Example 1: Full arguments
    let args1 = Args {
        verbose: true,
        output: Some("result.txt".to_string()),
        input: "data.csv".to_string(),
        files: vec!["file1.txt".to_string(), "file2.txt".to_string()],
    };

    println!("Example 1 - Full arguments:");
    println!("  Struct: {args1:#?}");
    println!("  As args: {:?}", args1.to_args());
    println!("  With program: {:?}", args1.to_args_with_program("myapp"));

    // Example 2: Minimal arguments
    let args2 = Args {
        verbose: false,
        output: None,
        input: "input.txt".to_string(), // Default value
        files: vec![],
    };

    println!("Example 2 - Minimal arguments:");
    println!("  Struct: {args2:#?}");
    println!("  As args: {:?}", args2.to_args());
    println!("  Note: Default values are not included in output!\n");

    // Example 3: Mixed arguments
    let args3 = Args {
        verbose: true,
        output: None,
        input: "custom.txt".to_string(),
        files: vec!["src/main.rs".to_string()],
    };

    println!("Example 3 - Mixed arguments:");
    println!("  As args: {:?}", args3.to_args());
}