use std::env;
const ALLOWED_ARGS: [&str; 3] = ["--port", "--threads", "--dir-path"];
pub struct CliArgs {
pub port: Option<String>,
pub thread_count: usize,
pub dir_path: String
}
impl CliArgs {
pub fn get() -> CliArgs {
let args: Vec<String> = env::args().collect();
let mut return_args = CliArgs { port: None, thread_count: 10, dir_path: String::from(args[0].as_str()) };
let mut i = 1;
while i < args.len() {
let arg = &args[i];
assert!(
ALLOWED_ARGS.contains(&arg.as_str()),
"Invalid argument {}", &arg.as_str()
);
assert!(i + 1 < args.len(), "Missing value for {}", arg);
if arg == "--port" {
return_args.port = Some(String::from(args[i + 1].as_str()));
} else if arg == "--threads" {
let pool_size = args[i + 1].as_str().parse();
match pool_size {
Ok(size) => {return_args.thread_count = size}
Err(_) => {
panic!("Unrecognized thread pool size. Please pass in a number")
}
}
} else if arg == "--dir-path" {
return_args.dir_path = String::from(args[i + 1].as_str());
}
i += 2;
}
return_args
}
}