pub(crate) fn is_help(token: &str) -> bool {
token == "-h" || token == "--help"
}
pub(crate) enum Token<'a> {
Help,
Flag {
name: &'a str,
inline: Option<&'a str>,
},
}
pub(crate) fn read_token(token: &str) -> Result<Token<'_>, String> {
if is_help(token) {
return Ok(Token::Help);
}
let Some(spelled) = token.strip_prefix("--") else {
return Err("unexpected argument where a '--flag' was expected".to_string());
};
Ok(match spelled.split_once('=') {
Some((name, inline)) => Token::Flag {
name,
inline: Some(inline),
},
None => Token::Flag {
name: spelled,
inline: None,
},
})
}
pub(crate) fn unknown_flag(name: &str, operation: &str) -> String {
format!("unknown flag '--{name}' for '{operation}'")
}
pub(crate) fn repeated_flag(name: &str) -> String {
format!("flag '--{name}' was given more than once")
}
pub(crate) fn flag_value_missing(name: &str) -> String {
format!("flag '--{name}' needs a value: '--{name} <value>'")
}