Skip to content

Commit

Permalink
fix: Simplify flag parsing
Browse files Browse the repository at this point in the history
Multiple values can only happen from env variables when configured by
the user, so let's not go out of our way to deal with it.
  • Loading branch information
epage committed Jul 28, 2022
1 parent 4887695 commit f76a867
Showing 1 changed file with 16 additions and 37 deletions.
53 changes: 16 additions & 37 deletions src/parser/parser.rs
Expand Up @@ -1184,17 +1184,10 @@ impl<'help, 'cmd> Parser<'help, 'cmd> {
Ok(ParseResult::ValuesDone)
}
ArgAction::SetTrue => {
let raw_vals = match raw_vals.len() {
0 => {
vec![OsString::from("true")]
}
1 => raw_vals,
_ => {
debug!("Parser::react ignoring trailing values: {:?}", raw_vals);
let mut raw_vals = raw_vals;
raw_vals.resize(1, Default::default());
raw_vals
}
let raw_vals = if raw_vals.is_empty() {
vec![OsString::from("true")]
} else {
raw_vals
};

matcher.remove(&arg.id);
Expand All @@ -1203,17 +1196,10 @@ impl<'help, 'cmd> Parser<'help, 'cmd> {
Ok(ParseResult::ValuesDone)
}
ArgAction::SetFalse => {
let raw_vals = match raw_vals.len() {
0 => {
vec![OsString::from("false")]
}
1 => raw_vals,
_ => {
debug!("Parser::react ignoring trailing values: {:?}", raw_vals);
let mut raw_vals = raw_vals;
raw_vals.resize(1, Default::default());
raw_vals
}
let raw_vals = if raw_vals.is_empty() {
vec![OsString::from("false")]
} else {
raw_vals
};

matcher.remove(&arg.id);
Expand All @@ -1222,21 +1208,14 @@ impl<'help, 'cmd> Parser<'help, 'cmd> {
Ok(ParseResult::ValuesDone)
}
ArgAction::Count => {
let raw_vals = match raw_vals.len() {
0 => {
let existing_value = *matcher
.get_one::<crate::builder::CountType>(arg.get_id())
.unwrap_or(&0);
let next_value = existing_value.saturating_add(1);
vec![OsString::from(next_value.to_string())]
}
1 => raw_vals,
_ => {
debug!("Parser::react ignoring trailing values: {:?}", raw_vals);
let mut raw_vals = raw_vals;
raw_vals.resize(1, Default::default());
raw_vals
}
let raw_vals = if raw_vals.is_empty() {
let existing_value = *matcher
.get_one::<crate::builder::CountType>(arg.get_id())
.unwrap_or(&0);
let next_value = existing_value.saturating_add(1);
vec![OsString::from(next_value.to_string())]
} else {
raw_vals
};

matcher.remove(&arg.id);
Expand Down

0 comments on commit f76a867

Please sign in to comment.