1use std::env;
2use std::process;
3
4use crate::config::Config;
5
6use getopts::Options;
7
8pub fn parse_args(name: &str) -> Option<Config> {
9 let args: Vec<String> = env::args().collect();
10
11 let mut opts = Options::new();
12 opts.optopt("c", "", "configuration path", "config");
13 opts.optflag("h", "help", "print this help");
14
15 let matches = match opts.parse(&args[1..]) {
16 Ok(m) => m,
17 Err(_) => {
18 print!("{}", opts.usage(&format!("Usage: {} -c PATH", name)));
19 return None;
20 }
21 };
22
23 if matches.opt_present("h") {
24 print!("{}", opts.usage(&format!("Usage: {} -c PATH", name)));
25 process::exit(0);
26 }
27
28 let path = matches.opt_str("c").unwrap_or_default();
29 match Config::new(path) {
30 Ok(c) => Some(c),
31 Err(e) => {
32 log::error!("{}", e);
33 None
34 }
35 }
36}