shadowsocks/
args.rs

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}