mirror of
https://github.com/PluralKit/PluralKit.git
synced 2026-02-15 18:20:11 +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,
|
cfg,
|
||||||
autoproxy,
|
autoproxy,
|
||||||
["timeout", "tm"],
|
["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",
|
"cfg_ap_timeout_update",
|
||||||
"Sets the autoproxy timeout"
|
"Sets the autoproxy timeout"
|
||||||
|
|
|
||||||
|
|
@ -101,6 +101,21 @@ pub fn parse_command(prefix: String, input: String) -> CommandResult {
|
||||||
TokenMatchError::MissingParameter { name } => {
|
TokenMatchError::MissingParameter { name } => {
|
||||||
format!("Expected parameter `{name}` in command `{prefix}{input} {token}`.")
|
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 };
|
return CommandResult::Err { error: error_msg };
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@ pub enum Token {
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum TokenMatchError {
|
pub enum TokenMatchError {
|
||||||
MissingParameter { name: ParamName },
|
MissingParameter { name: ParamName },
|
||||||
|
MissingAny { tokens: Vec<Token> },
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
|
@ -108,8 +109,9 @@ impl Token {
|
||||||
Some(Err(TokenMatchError::MissingParameter { name: param_name }))
|
Some(Err(TokenMatchError::MissingParameter { name: param_name }))
|
||||||
}
|
}
|
||||||
Self::Any(tokens) => tokens.is_empty().then_some(None).unwrap_or_else(|| {
|
Self::Any(tokens) => tokens.is_empty().then_some(None).unwrap_or_else(|| {
|
||||||
let mut results = tokens.iter().map(|t| t.try_match(None));
|
Some(Err(TokenMatchError::MissingAny {
|
||||||
results.find(|r| !matches!(r, None)).unwrap_or(None)
|
tokens: tokens.clone(),
|
||||||
|
}))
|
||||||
}),
|
}),
|
||||||
// everything else doesnt match if no input anyway
|
// everything else doesnt match if no input anyway
|
||||||
Token::Value(_) => None,
|
Token::Value(_) => None,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue