mod args; use crate::args::Parser; use std::process::ExitCode; fn parse_args() -> Result { let mut options = args::Options::new(); let help_idx = options.push( args::OptionBuilder::default() .short('h') .long("help") .description("display this and exit") .build() .unwrap(), ); let version_idx = options.push( args::OptionBuilder::default() .short('V') .long("version") .description("display version and exit") .build() .unwrap(), ); let verbose_idx = options.push( args::OptionBuilder::default() .long("verbose") .description("be verbose") .build() .unwrap(), ); let test_idx = options.push( args::OptionBuilder::default() .short('t') .long("test") .description("testing") .value(args::ValueRequirement::Required("FILE")) .build() .unwrap(), ); let parser = args::ShortAndLongParser::new(); let args = parser.run(&mut options, std::env::args())?; let ref help = options[help_idx]; if help.is_set() { parser.print_help(&options); return Ok(true); } let ref version = options[version_idx]; if version.is_set() { println!("Version is 0.0.1"); return Ok(true); } let ref verbose = options[verbose_idx]; let ref test = options[test_idx]; println!("verbose: {}", verbose.is_set()); println!("test: {:?}", test.value()); println!("args: {:?}", args.args); Ok(false) } fn main() -> ExitCode { match parse_args() { Ok(exit) => { if exit { return ExitCode::SUCCESS; } } Err(msg) => { eprintln!("{}", msg); return ExitCode::FAILURE; } } ExitCode::SUCCESS }