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