mirror of
https://github.com/PluralKit/PluralKit.git
synced 2026-02-04 04:56:49 +00:00
fix(commands): add separate missing error for Token::Any to relay a better error message to user
This commit is contained in:
parent
8a01d7d37a
commit
58b5a26eca
3 changed files with 20 additions and 3 deletions
|
|
@ -27,7 +27,7 @@ pub fn cmds() -> impl Iterator<Item = Command> {
|
|||
cfg,
|
||||
autoproxy,
|
||||
["timeout", "tm"],
|
||||
[Disable("toggle"), Reset("reset"), FullString("timeout")]
|
||||
[Disable("toggle"), Reset("reset"), FullString("timeout")] // todo: we should parse duration / time values
|
||||
],
|
||||
"cfg_ap_timeout_update",
|
||||
"Sets the autoproxy timeout"
|
||||
|
|
|
|||
|
|
@ -101,6 +101,21 @@ pub fn parse_command(prefix: String, input: String) -> CommandResult {
|
|||
TokenMatchError::MissingParameter { name } => {
|
||||
format!("Expected parameter `{name}` in command `{prefix}{input} {token}`.")
|
||||
}
|
||||
TokenMatchError::MissingAny { tokens } => {
|
||||
let mut msg = format!("Expected one of ");
|
||||
for (idx, token) in tokens.iter().enumerate() {
|
||||
write!(&mut msg, "`{token}`").expect("oom");
|
||||
if idx < tokens.len() - 1 {
|
||||
if tokens.len() > 2 && idx == tokens.len() - 2 {
|
||||
msg.push_str(" or ");
|
||||
} else {
|
||||
msg.push_str(", ");
|
||||
}
|
||||
}
|
||||
}
|
||||
write!(&mut msg, " in command `{prefix}{input} {token}`.").expect("oom");
|
||||
msg
|
||||
}
|
||||
};
|
||||
return CommandResult::Err { error: error_msg };
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ pub enum Token {
|
|||
#[derive(Debug)]
|
||||
pub enum TokenMatchError {
|
||||
MissingParameter { name: ParamName },
|
||||
MissingAny { tokens: Vec<Token> },
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
|
|
@ -108,8 +109,9 @@ impl Token {
|
|||
Some(Err(TokenMatchError::MissingParameter { name: param_name }))
|
||||
}
|
||||
Self::Any(tokens) => tokens.is_empty().then_some(None).unwrap_or_else(|| {
|
||||
let mut results = tokens.iter().map(|t| t.try_match(None));
|
||||
results.find(|r| !matches!(r, None)).unwrap_or(None)
|
||||
Some(Err(TokenMatchError::MissingAny {
|
||||
tokens: tokens.clone(),
|
||||
}))
|
||||
}),
|
||||
// everything else doesnt match if no input anyway
|
||||
Token::Value(_) => None,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue