1#![allow(dead_code)]
2
3#[derive(Debug)]
4struct Args {
5 forwarded_args: Vec<String>,
6 help: bool,
7}
8
9fn parse_args() -> Result<Args, no_pico_args::Error> {
10 let mut args: Vec<_> = std::env::args_os()
11 .map(|s| s.into_string().expect("Non-UTF-8 argument"))
12 .collect();
13 args.remove(0); let forwarded_args = if let Some(dash_dash) = args.iter().position(|arg| arg == "--") {
17 let later_args = args.drain(dash_dash + 1..).collect();
19 args.pop();
21 later_args
22 } else {
23 Vec::new()
24 };
25
26 let mut args = no_pico_args::Arguments::from_vec(args);
28 let res = Args {
29 forwarded_args,
30 help: args.contains(["-h", "--help"]),
31 };
32
33 let remaining = args.finish();
35 if !remaining.is_empty() {
36 eprintln!("Warning: unused arguments left: {:?}", remaining);
37 }
38
39 Ok(res)
40}
41
42fn main() {
43 match parse_args() {
44 Ok(args) => println!("{:#?}", args),
45 Err(err) => eprintln!("{}", err),
46 }
47}