option_parser: Extend option parsing for lists

While parsing each parameter for getting the list of option/value, we
check if the value is a list separated between brackets. If that's the
case, we reconstruct the list so that it can be parsed afterwards, even
though it uses commas for separating each value.

Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
This commit is contained in:
Sebastien Boeuf 2021-11-08 09:29:11 +01:00
parent d3b2f2a4d9
commit 184a3d1fb5

View File

@ -49,7 +49,26 @@ impl OptionParser {
return Ok(());
}
let options_list: Vec<&str> = input.trim().split(',').collect();
let mut options_list: Vec<String> = Vec::new();
let mut merge_elements = false;
for element in input.trim().split(',') {
if merge_elements {
if let Some(last) = options_list.last_mut() {
*last = format!("{},{}", last, element);
} else {
return Err(OptionParserError::InvalidSyntax(input.to_owned()));
}
} else {
options_list.push(element.to_string());
}
if element.contains('[') {
merge_elements = true;
}
if element.contains(']') {
merge_elements = false;
}
}
for option in options_list.iter() {
let parts: Vec<&str> = option.split('=').collect();