libtest_cli/libtest-cli.rs
1fn main() -> lexarg::Result<()> {
2 use lexarg::prelude::*;
3
4 let mut test_opts = libtest_lexarg::TestOptsBuilder::new();
5
6 let raw = std::env::args_os().collect::<Vec<_>>();
7 let mut parser = lexarg::Parser::new(&raw);
8 let bin = parser
9 .next_raw()
10 .expect("first arg, no pending values")
11 .unwrap_or(std::ffi::OsStr::new("test"));
12 let mut prev_arg = Value(bin);
13 while let Some(arg) = parser.next_arg() {
14 match arg {
15 Short("h") | Long("help") => {
16 let bin = bin.to_string_lossy();
17 let options_help = libtest_lexarg::OPTIONS_HELP.trim();
18 let after_help = libtest_lexarg::AFTER_HELP.trim();
19 println!(
20 "Usage: {bin} [OPTIONS] [FILTER]...
21
22{options_help}
23
24{after_help}"
25 );
26 std::process::exit(0);
27 }
28 // All values are the same, whether escaped or not, so its a no-op
29 Escape(_) => {
30 prev_arg = arg;
31 continue;
32 }
33 Unexpected(_) => {
34 return Err(lexarg::LexError::msg("unexpected value")
35 .unexpected(arg)
36 .within(prev_arg)
37 .into());
38 }
39 _ => {}
40 }
41 prev_arg = arg;
42
43 let arg = test_opts.parse_next(&mut parser, arg)?;
44
45 if let Some(arg) = arg {
46 return Err(lexarg::LexError::msg("unexpected argument")
47 .unexpected(arg)
48 .into());
49 }
50 }
51
52 let opts = test_opts.finish()?;
53 println!("{opts:#?}");
54
55 Ok(())
56}