1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
use std::fmt; use crate::EvalexprError; impl fmt::Display for EvalexprError { fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { use crate::EvalexprError::*; match self { WrongOperatorArgumentAmount { expected, actual } => write!( f, "An operator expected {} arguments, but got {}.", expected, actual ), WrongFunctionArgumentAmount { expected, actual } => write!( f, "A function expected {} arguments, but got {}.", expected, actual ), ExpectedString { actual } => { write!(f, "Expected a Value::String, but got {:?}.", actual) }, ExpectedInt { actual } => write!(f, "Expected a Value::Int, but got {:?}.", actual), ExpectedFloat { actual } => write!(f, "Expected a Value::Float, but got {:?}.", actual), ExpectedNumber { actual } => write!( f, "Expected a Value::Float or Value::Int, but got {:?}.", actual ), ExpectedNumberOrString { actual } => write!( f, "Expected a Value::Number or a Value::String, but got {:?}.", actual ), ExpectedBoolean { actual } => { write!(f, "Expected a Value::Boolean, but got {:?}.", actual) }, ExpectedTuple { actual } => write!(f, "Expected a Value::Tuple, but got {:?}.", actual), ExpectedFixedLenTuple { expected_len, actual, } => write!( f, "Expected a Value::Tuple of len {}, but got {:?}.", expected_len, actual ), ExpectedEmpty { actual } => write!(f, "Expected a Value::Empty, but got {:?}.", actual), AppendedToLeafNode => write!(f, "Tried to append a node to a leaf node."), PrecedenceViolation => write!( f, "Tried to append a node to another node with higher precedence." ), VariableIdentifierNotFound(identifier) => write!( f, "Variable identifier is not bound to anything by context: {:?}.", identifier ), FunctionIdentifierNotFound(identifier) => write!( f, "Function identifier is not bound to anything by context: {:?}.", identifier ), TypeError { expected, actual } => { write!(f, "Expected one of {:?}, but got {:?}.", expected, actual) }, WrongTypeCombination { operator, actual } => write!( f, "The operator {:?} was called with a wrong combination of types: {:?}", operator, actual ), UnmatchedLBrace => write!(f, "Found an unmatched opening parenthesis '('."), UnmatchedRBrace => write!(f, "Found an unmatched closing parenthesis ')'."), UnmatchedPartialToken { first, second } => { if let Some(second) = second { write!( f, "Found a partial token '{}' that should not be followed by '{}'.", first, second ) } else { write!( f, "Found a partial token '{}' that should be followed by another partial \ token.", first ) } }, AdditionError { augend, addend } => write!(f, "Error adding {} + {}", augend, addend), SubtractionError { minuend, subtrahend, } => write!(f, "Error subtracting {} - {}", minuend, subtrahend), NegationError { argument } => write!(f, "Error negating -{}", argument), MultiplicationError { multiplicand, multiplier, } => write!(f, "Error multiplying {} * {}", multiplicand, multiplier), DivisionError { dividend, divisor } => { write!(f, "Error dividing {} / {}", dividend, divisor) }, ModulationError { dividend, divisor } => { write!(f, "Error modulating {} % {}", dividend, divisor) }, InvalidRegex { regex, message } => write!( f, "Regular expression {:?} is invalid: {:?}", regex, message ), ContextNotMutable => write!(f, "Cannot manipulate context"), IllegalEscapeSequence(string) => write!(f, "Illegal escape sequence: {}", string), CustomMessage(message) => write!(f, "Error: {}", message), } } }