use lino_arguments::{load_lenv_file, Parser};
#[derive(Parser, Debug)]
#[command(name = "lino-arguments")]
#[command(about = "A unified configuration library example")]
#[command(version)]
struct Args {
#[arg(short, long, env = "PORT", default_value = "3000")]
port: u16,
#[arg(short = 'k', long, env = "API_KEY")]
api_key: Option<String>,
#[arg(short, long, env = "VERBOSE")]
verbose: bool,
#[arg(short, long)]
configuration: Option<String>,
}
fn main() {
let args = Args::parse();
if let Some(ref config_path) = args.configuration {
if let Err(e) = load_lenv_file(config_path) {
eprintln!(
"Warning: Failed to load config file '{}': {}",
config_path, e
);
}
}
if args.verbose {
println!("Configuration loaded:");
println!(" Port: {}", args.port);
println!(
" API Key: {}",
if let Some(ref key) = args.api_key {
key.as_str()
} else {
"(not set)"
}
);
println!(" Verbose: {}", args.verbose);
if let Some(ref cfg) = args.configuration {
println!(" Config file: {}", cfg);
}
}
println!("Server would start on port {}", args.port);
}