Implement parse_opt_bool better
During my clean-up of rebase errors, I took the opportunity to implement parse_opt_bool so that it isn't identical to parse_bool wrapped in `Some`. parse_opt_bool considers no value to be true, a value of 'y', 'yes' or 'on' to be true and 'n', 'no' or 'off' to be false. All other values are an error.
This commit is contained in:
parent
1246d4067f
commit
280dea743b
1 changed files with 15 additions and 2 deletions
|
@ -348,7 +348,8 @@ macro_rules! options {
|
|||
#[allow(non_upper_case_globals, dead_code)]
|
||||
mod $mod_desc {
|
||||
pub const parse_bool: Option<&'static str> = None;
|
||||
pub const parse_opt_bool: Option<&'static str> = None;
|
||||
pub const parse_opt_bool: Option<&'static str> =
|
||||
Some("one of: `y`, `yes`, `on`, `n`, `no`, or `off`");
|
||||
pub const parse_string: Option<&'static str> = Some("a string");
|
||||
pub const parse_opt_string: Option<&'static str> = Some("a string");
|
||||
pub const parse_list: Option<&'static str> = Some("a space-separated list of strings");
|
||||
|
@ -379,7 +380,19 @@ macro_rules! options {
|
|||
|
||||
fn parse_opt_bool(slot: &mut Option<bool>, v: Option<&str>) -> bool {
|
||||
match v {
|
||||
Some(..) => false,
|
||||
Some(s) => {
|
||||
match s {
|
||||
"n" | "no" | "off" => {
|
||||
*slot = Some(false);
|
||||
}
|
||||
"y" | "yes" | "on" => {
|
||||
*slot = Some(true);
|
||||
}
|
||||
_ => { return false; }
|
||||
}
|
||||
|
||||
true
|
||||
},
|
||||
None => { *slot = Some(true); true }
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue