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 {
#[arg(short, long)]
verbose: bool,
#[arg(short, long, value_name = "FILE")]
output: Option<String>,
#[arg(short, long, default_value = "input.txt")]
input: String,
#[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");
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"));
let args2 = Args {
verbose: false,
output: None,
input: "input.txt".to_string(), 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");
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());
}