getopts: improve error handling

This commit is contained in:
Dietmar Maurer
2018-11-17 09:57:26 +01:00
parent ffff48fcfe
commit 0c9ce2bbf0
3 changed files with 29 additions and 17 deletions

View File

@ -36,13 +36,19 @@ fn parse_argument(arg: &str) -> RawArgument {
RawArgument::Argument { value: arg.to_string() }
}
pub fn parse_arguments(args: &Vec<String>, schema: &Schema) -> Value {
pub fn parse_arguments(
args: &Vec<String>,
schema: &Schema,
) -> Result<(Value,Vec<String>), ParameterError> {
println!("ARGS {:?}", args);
let mut errors = ParameterError::new();
let properties = match schema {
Schema::Object(ObjectSchema { properties, .. }) => properties,
_ => panic!("Expected Object Schema."),
_ => {
errors.push(format_err!("parse arguments failed - got strange parameters (expected object schema)."));
return Err(errors);
},
};
let mut data: Vec<(String, String)> = vec![];
@ -73,7 +79,8 @@ pub fn parse_arguments(args: &Vec<String>, schema: &Schema) -> Value {
if default == false {
data.push((name, "true".to_string()));
} else {
panic!("negative Bool requires argument");
errors.push(format_err!("parameter '{}': {}", name,
"boolean requires argument."));
}
} else {
data.push((name, "true".to_string()));
@ -97,13 +104,9 @@ pub fn parse_arguments(args: &Vec<String>, schema: &Schema) -> Value {
if pos >= args.len() { break; }
}
println!("Options {:?}", data);
println!("REST {:?}", rest);
if errors.len() > 0 { return Err(errors); }
match parse_parameter_strings(&data, schema, true) {
Ok(value) => value,
Err(perror) => {
panic!(format!("{:?}", perror));
}
}
let options = parse_parameter_strings(&data, schema, true)?;
Ok((options,rest))
}