use std::collections::HashMap;
use std::collections::HashSet;
use std::str::FromStr;
pub struct ParsedArgs {
pub(crate) name: String,
pub(crate) flags: HashSet<String>,
pub(crate) params: HashMap<String, String>,
pub(crate) unnameds: Vec<String>,
pub(crate) subcommand: Vec<String>,
}
impl ParsedArgs {
pub fn name(&self) -> &str {
self.name.as_str()
}
pub fn has_flag(&self, name: &str) -> bool {
self.flags.contains(name)
}
pub fn get_param(&self, name: &str) -> Option<&str> {
match self.params.get(name) {
Some(value) => Some(value.as_str()),
None => None,
}
}
pub fn get_param_as<T: FromStr>(&self, name: &str) -> Option<Result<T, T::Err>> {
match self.params.get(name) {
Some(value) => Some(value.parse()),
None => None,
}
}
pub fn unnamed_params(&self) -> &Vec<String> {
&self.unnameds
}
pub fn get_subcommand(&self) -> Option<&str> {
match self.subcommand.get(0) {
Some(value) => Some(value.as_str()),
None => None,
}
}
pub fn subcommand_args(&self) -> &Vec<String> {
&self.subcommand
}
}