forked from projectmoon/tenebrous-dicebot
Better error message when dice pool variable not defined.
This commit is contained in:
parent
af2e58351f
commit
d0a1f59ec7
|
@ -1,9 +1,17 @@
|
|||
use crate::context::Context;
|
||||
use crate::db::DataError::KeyDoesNotExist;
|
||||
use crate::error::BotError;
|
||||
use crate::roll::{Roll, Rolled};
|
||||
use itertools::Itertools;
|
||||
use std::convert::TryFrom;
|
||||
use std::fmt;
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
pub enum DiceRollingError {
|
||||
#[error("variable not found: {0}")]
|
||||
VariableNotFound(String),
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Eq, Clone)]
|
||||
pub enum Operator {
|
||||
|
@ -350,7 +358,10 @@ fn roll_die<R: DieRoller>(roller: &mut R, pool: &DicePool) -> Vec<i32> {
|
|||
fn handle_variable(ctx: &Context, variable: &str) -> Result<i32, BotError> {
|
||||
ctx.db
|
||||
.get_user_variable(&ctx.room_id, &ctx.username, variable)
|
||||
.map_err(|e| e.into())
|
||||
.map_err(|e| match e {
|
||||
KeyDoesNotExist(_) => DiceRollingError::VariableNotFound(variable.to_owned()).into(),
|
||||
_ => e.into(),
|
||||
})
|
||||
}
|
||||
|
||||
///Roll the dice in a dice pool, according to behavior documented in the various rolling
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
use crate::cofd::dice::DiceRollingError;
|
||||
use crate::commands::CommandError;
|
||||
use crate::config::ConfigError;
|
||||
use crate::db::DataError;
|
||||
|
@ -55,6 +56,9 @@ pub enum BotError {
|
|||
#[error("dice parsing error: {0}")]
|
||||
DiceParsingError(#[from] crate::cofd::parser::DiceParsingError),
|
||||
|
||||
#[error("dice pool roll error: {0}")]
|
||||
DicePoolError(#[from] DiceRollingError),
|
||||
|
||||
#[error("variable parsing error: {0}")]
|
||||
VariableParsingError(#[from] crate::variables::VariableParsingError),
|
||||
|
||||
|
|
Loading…
Reference in New Issue