/// A list specifying option parsing and validating errors.
#[derive(Clone,Copy,Debug,PartialEq)]
/// A list specifying option parsing and validating errors.
#[derive(Clone,Copy,Debug,PartialEq)]
impl NAOptionDefinition {
/// Tries to parse input string(s) as an option and returns new option and number of arguments used (1 or 2) on success.
impl NAOptionDefinition {
/// Tries to parse input string(s) as an option and returns new option and number of arguments used (1 or 2) on success.
- pub fn parse(&self, name: &String, value: Option<&String>) -> OptionResult<(NAOption, usize)> {
+ pub fn parse(&self, name: &str, value: Option<&String>) -> OptionResult<(NAOption, usize)> {
match self.opt_type {
NAOptionDefinitionType::Bool => return Ok((NAOption { name: self.name, value: NAValue::Bool(false) }, 1)),
_ => return Err(OptionError::InvalidFormat),
};
}
let opt_name = "--".to_owned() + self.name;
match self.opt_type {
NAOptionDefinitionType::Bool => return Ok((NAOption { name: self.name, value: NAValue::Bool(false) }, 1)),
_ => return Err(OptionError::InvalidFormat),
};
}
let opt_name = "--".to_owned() + self.name;
- if let NAOptionDefinitionType::String(Some(ref strings)) = self.opt_type {
- for str in strings.iter() {
- if cur_str == str {
+ if let NAOptionDefinitionType::String(Some(strings)) = self.opt_type {
+ for string in strings.iter() {
+ if cur_str == string {
NAOptionDefinitionType::None => write!(f, "{}: {}", self.name, self.description),
NAOptionDefinitionType::Bool => write!(f, "[no]{}: {}", self.name, self.description),
NAOptionDefinitionType::String(ref str_list) => {
NAOptionDefinitionType::None => write!(f, "{}: {}", self.name, self.description),
NAOptionDefinitionType::Bool => write!(f, "[no]{}: {}", self.name, self.description),
NAOptionDefinitionType::String(ref str_list) => {
write!(f, "{} {}: {}", self.name, opts.join("|"), self.description)
} else {
write!(f, "{} <string>: {}", self.name, self.description)
write!(f, "{} {}: {}", self.name, opts.join("|"), self.description)
} else {
write!(f, "{} <string>: {}", self.name, self.description)
#[test]
fn test_option_parsing() {
let mut def = NAOptionDefinition { name: "option", description: "", opt_type: NAOptionDefinitionType::Float(None, None) };
#[test]
fn test_option_parsing() {
let mut def = NAOptionDefinition { name: "option", description: "", opt_type: NAOptionDefinitionType::Float(None, None) };
- assert_eq!(def.parse(&"--option".to_string(), None), Err(OptionError::ParseError));
- assert_eq!(def.parse(&"--nooption".to_string(), None), Err(OptionError::InvalidFormat));
- assert_eq!(def.parse(&"--option".to_string(), Some(&"42".to_string())),
+ assert_eq!(def.parse("--option", None), Err(OptionError::ParseError));
+ assert_eq!(def.parse("--nooption", None), Err(OptionError::InvalidFormat));
+ assert_eq!(def.parse("--option", Some(&"42".to_string())),
Ok((NAOption{name:"option",value: NAValue::Float(42.0)}, 2)));
def.opt_type = NAOptionDefinitionType::Float(None, Some(40.0));
Ok((NAOption{name:"option",value: NAValue::Float(42.0)}, 2)));
def.opt_type = NAOptionDefinitionType::Float(None, Some(40.0));
Err(OptionError::InvalidValue));
let def = NAOptionDefinition { name: "option", description: "", opt_type: NAOptionDefinitionType::Bool };
Err(OptionError::InvalidValue));
let def = NAOptionDefinition { name: "option", description: "", opt_type: NAOptionDefinitionType::Bool };