use std::collections::HashMap;
use args::SubCommand;
use args::MatchedArg;
#[derive(Debug)]
pub struct ArgMatches<'n, 'a> {
#[doc(hidden)]
pub args: HashMap<&'a str, MatchedArg>,
#[doc(hidden)]
pub subcommand: Option<Box<SubCommand<'n, 'a>>>,
#[doc(hidden)]
pub usage: Option<String>,
}
impl<'n, 'a> ArgMatches<'n, 'a> {
#[doc(hidden)]
pub fn new() -> ArgMatches<'n, 'a> {
ArgMatches {
args: HashMap::new(),
subcommand: None,
usage: None,
}
}
pub fn value_of(&self, name: &str) -> Option<&str> {
if let Some(ref arg) = self.args.get(name) {
if let Some(ref vals) = arg.values {
if let Some(ref val) = vals.values().nth(0) {
return Some(&val[..]);
}
}
}
None
}
pub fn values_of(&'a self, name: &str) -> Option<Vec<&'a str>> {
if let Some(ref arg) = self.args.get(name) {
if let Some(ref vals) = arg.values {
return Some(vals.values().map(|s| &s[..]).collect::<Vec<_>>());
}
}
None
}
pub fn is_present(&self, name: &str) -> bool {
if let Some(ref sc) = self.subcommand {
if sc.name == name {
return true;
}
}
if self.args.contains_key(name) {
return true;
}
false
}
pub fn occurrences_of(&self, name: &str) -> u8 {
if let Some(ref arg) = self.args.get(name) {
return arg.occurrences;
}
0
}
pub fn subcommand_matches<'na>(&self, name: &'na str) -> Option<&ArgMatches> {
if let Some(ref sc) = self.subcommand {
if sc.name != name {
return None;
}
return Some(&sc.matches);
}
None
}
pub fn subcommand_name(&self) -> Option<&str> {
if let Some(ref sc) = self.subcommand {
return Some(&sc.name[..]);
}
None
}
pub fn subcommand(&self) -> (&str, Option<&ArgMatches>) {
if let Some(ref sc) = self.subcommand {
return (&sc.name[..], Some(&sc.matches));
}
("", None)
}
pub fn usage(&self) -> &str {
if let Some(ref u) = self.usage {
return &u[..];
}
""
}
}