mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2024-12-22 21:55:20 +00:00
option_parser: Handle inner brackets
In case we want to implement a type that would hold a list of lists, we need the option parser to be able to ignore the commas for multiple layers of brackets. Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
This commit is contained in:
parent
b81d758c41
commit
e4cbafcd01
@ -50,9 +50,9 @@ impl OptionParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let mut options_list: Vec<String> = Vec::new();
|
let mut options_list: Vec<String> = Vec::new();
|
||||||
let mut merge_elements = false;
|
let mut opened_brackets: usize = 0;
|
||||||
for element in input.trim().split(',') {
|
for element in input.trim().split(',') {
|
||||||
if merge_elements {
|
if opened_brackets > 0 {
|
||||||
if let Some(last) = options_list.last_mut() {
|
if let Some(last) = options_list.last_mut() {
|
||||||
*last = format!("{},{}", last, element);
|
*last = format!("{},{}", last, element);
|
||||||
} else {
|
} else {
|
||||||
@ -62,11 +62,12 @@ impl OptionParser {
|
|||||||
options_list.push(element.to_string());
|
options_list.push(element.to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
if element.contains('[') {
|
opened_brackets += element.matches('[').count();
|
||||||
merge_elements = true;
|
let closing_brackets = element.matches(']').count();
|
||||||
}
|
if closing_brackets > opened_brackets {
|
||||||
if element.contains(']') {
|
return Err(OptionParserError::InvalidSyntax(input.to_owned()));
|
||||||
merge_elements = false;
|
} else {
|
||||||
|
opened_brackets -= closing_brackets;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user