parent
38c4c35a0b
commit
1ae674a693
@ -13,30 +13,42 @@ use token::PartialToken;
|
|||||||
pub enum Error {
|
pub enum Error {
|
||||||
/// An operator was called with a wrong amount of arguments.
|
/// An operator was called with a wrong amount of arguments.
|
||||||
WrongOperatorArgumentAmount {
|
WrongOperatorArgumentAmount {
|
||||||
/// Expected amount of arguments.
|
/// The expected amount of arguments.
|
||||||
expected: usize,
|
expected: usize,
|
||||||
/// Actual amount of arguments.
|
/// The actual amount of arguments.
|
||||||
actual: usize,
|
actual: usize,
|
||||||
},
|
},
|
||||||
|
|
||||||
/// A function was called with a wrong amount of arguments.
|
/// A function was called with a wrong amount of arguments.
|
||||||
WrongFunctionArgumentAmount {
|
WrongFunctionArgumentAmount {
|
||||||
/// Expected amount of arguments.
|
/// The expected amount of arguments.
|
||||||
expected: usize,
|
expected: usize,
|
||||||
/// Actual amount of arguments.
|
/// The actual amount of arguments.
|
||||||
actual: usize,
|
actual: usize,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/// An integer value was expected.
|
||||||
|
ExpectedInt {
|
||||||
|
/// The actual value.
|
||||||
|
actual: Value,
|
||||||
|
},
|
||||||
|
|
||||||
|
/// A float value was expected.
|
||||||
|
ExpectedFloat {
|
||||||
|
/// The actual value.
|
||||||
|
actual: Value,
|
||||||
|
},
|
||||||
|
|
||||||
/// A numeric value was expected.
|
/// A numeric value was expected.
|
||||||
/// Numeric values are the variants `Value::Int` and `Value::Float`.
|
/// Numeric values are the variants `Value::Int` and `Value::Float`.
|
||||||
ExpectedNumber {
|
ExpectedNumber {
|
||||||
/// Actual value.
|
/// The actual value.
|
||||||
actual: Value,
|
actual: Value,
|
||||||
},
|
},
|
||||||
|
|
||||||
/// A boolean value was expected.
|
/// A boolean value was expected.
|
||||||
ExpectedBoolean {
|
ExpectedBoolean {
|
||||||
/// Actual value.
|
/// The actual value.
|
||||||
actual: Value,
|
actual: Value,
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -60,8 +72,14 @@ pub enum Error {
|
|||||||
/// A `FunctionIdentifier` operation did not find its value in the configuration.
|
/// A `FunctionIdentifier` operation did not find its value in the configuration.
|
||||||
FunctionIdentifierNotFound(String),
|
FunctionIdentifierNotFound(String),
|
||||||
|
|
||||||
/// A value has the wrong type. Only use this if there is no other error that describes the expected and provided types in more detail.
|
/// A value has the wrong type.
|
||||||
TypeError,
|
/// Only use this if there is no other error that describes the expected and provided types in more detail.
|
||||||
|
TypeError {
|
||||||
|
/// The expected types.
|
||||||
|
expected: Vec<Value>,
|
||||||
|
/// The actual value.
|
||||||
|
actual: Value,
|
||||||
|
},
|
||||||
|
|
||||||
/// An opening brace without a matching closing brace was found.
|
/// An opening brace without a matching closing brace was found.
|
||||||
UnmatchedLBrace,
|
UnmatchedLBrace,
|
||||||
@ -89,6 +107,21 @@ impl Error {
|
|||||||
Error::WrongFunctionArgumentAmount { actual, expected }
|
Error::WrongFunctionArgumentAmount { actual, expected }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Constructs `Error::TypeError{actual, expected}`.
|
||||||
|
pub fn type_error(actual: Value, expected: Vec<Value>) -> Self {
|
||||||
|
Error::TypeError {actual, expected}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Constructs `Error::ExpectedInt(actual)`.
|
||||||
|
pub fn expected_int(actual: Value) -> Self {
|
||||||
|
Error::ExpectedInt { actual }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Constructs `Error::ExpectedFloat(actual)`.
|
||||||
|
pub fn expected_float(actual: Value) -> Self {
|
||||||
|
Error::ExpectedFloat { actual }
|
||||||
|
}
|
||||||
|
|
||||||
/// Constructs `Error::ExpectedNumber(actual)`.
|
/// Constructs `Error::ExpectedNumber(actual)`.
|
||||||
pub fn expected_number(actual: Value) -> Self {
|
pub fn expected_number(actual: Value) -> Self {
|
||||||
Error::ExpectedNumber { actual }
|
Error::ExpectedNumber { actual }
|
||||||
|
@ -42,7 +42,7 @@ impl Value {
|
|||||||
pub fn as_int(&self) -> Result<IntType, Error> {
|
pub fn as_int(&self) -> Result<IntType, Error> {
|
||||||
match self {
|
match self {
|
||||||
Value::Int(i) => Ok(*i),
|
Value::Int(i) => Ok(*i),
|
||||||
_ => Err(Error::TypeError),
|
value => Err(Error::expected_int(value.clone())),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ impl Value {
|
|||||||
match self {
|
match self {
|
||||||
Value::Float(f) => Ok(*f),
|
Value::Float(f) => Ok(*f),
|
||||||
Value::Int(i) => Ok(*i as FloatType),
|
Value::Int(i) => Ok(*i as FloatType),
|
||||||
_ => Err(Error::TypeError),
|
value => Err(Error::expected_number(value.clone())),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user