mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
option_parser: Introduce parse_subset() tolerating unknown options
Refactor parse() into a version that can control whether to tolerate unknown options. This can then be used to then parse a subset of the options. Signed-off-by: Rob Bradford <rbradford@meta.com>
This commit is contained in:
@@ -93,7 +93,7 @@ impl OptionParser {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn parse(&mut self, input: &str) -> OptionParserResult<()> {
|
fn parse_inner(&mut self, input: &str, ignore_unknown: bool) -> OptionParserResult<()> {
|
||||||
if input.trim().is_empty() {
|
if input.trim().is_empty() {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
@@ -101,7 +101,11 @@ impl OptionParser {
|
|||||||
for option in split_commas(input)?.iter() {
|
for option in split_commas(input)?.iter() {
|
||||||
let parts: Vec<&str> = option.splitn(2, '=').collect();
|
let parts: Vec<&str> = option.splitn(2, '=').collect();
|
||||||
match self.options.get_mut(parts[0]) {
|
match self.options.get_mut(parts[0]) {
|
||||||
None => return Err(OptionParserError::UnknownOption(parts[0].to_owned())),
|
None => {
|
||||||
|
if !ignore_unknown {
|
||||||
|
return Err(OptionParserError::UnknownOption(parts[0].to_owned()));
|
||||||
|
}
|
||||||
|
}
|
||||||
Some(value) => {
|
Some(value) => {
|
||||||
if value.requires_value {
|
if value.requires_value {
|
||||||
if parts.len() != 2 {
|
if parts.len() != 2 {
|
||||||
@@ -118,6 +122,14 @@ impl OptionParser {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn parse(&mut self, input: &str) -> OptionParserResult<()> {
|
||||||
|
self.parse_inner(input, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn parse_subset(&mut self, input: &str) -> OptionParserResult<()> {
|
||||||
|
self.parse_inner(input, true)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn add(&mut self, option: &str) -> &mut Self {
|
pub fn add(&mut self, option: &str) -> &mut Self {
|
||||||
// Check that option=value has balanced
|
// Check that option=value has balanced
|
||||||
// quotes and brackets iff value does.
|
// quotes and brackets iff value does.
|
||||||
|
|||||||
Reference in New Issue
Block a user