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