use crate::value::Value;
use displaydoc::Display as DisplayDoc;
use std::{num::TryFromIntError, result};
pub type Result<T> = result::Result<T, Error>;
#[derive(Debug, DisplayDoc, thiserror::Error)]
pub enum Error {
InvalidFunctionName(String),
InvalidRuleName(String),
DuplicateFunctionName(String),
DuplicateRuleName(String),
ValueSerializationError(String),
InvalidType,
InvalidCast(Value, String),
NumericOverflow(#[from] TryFromIntError),
UnexpectedValueType(Value, String),
UnknownRef(String),
UnknownIndex(String),
UserFunctionError {
function: String,
error: anyhow::Error,
},
UnknownUserFunction(String),
}
impl Error {
pub fn ser(error_msg: impl Into<String>) -> Self {
Error::ValueSerializationError(error_msg.into())
}
}