use std::fmt;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DaceError {
pub code: u32,
pub message: String,
}
impl DaceError {
pub fn new(code: u32, message: impl Into<String>) -> Self {
DaceError {
code,
message: message.into(),
}
}
pub fn severity(&self) -> u32 {
self.code / 100
}
}
impl fmt::Display for DaceError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "DACE error {}: {}", self.code, self.message)
}
}
impl std::error::Error for DaceError {}
pub(crate) fn dace_panic(code: u32, message: &str) -> ! {
std::panic::panic_any(DaceError::new(code, message))
}
#[allow(dead_code)]
pub(crate) mod codes {
pub const NOT_INITIALIZED: u32 = 1003;
pub const ORDER_VARIABLE_TOO_LARGE: u32 = 911;
pub const ORDER_TOO_LARGE: u32 = 622;
pub const INVALID_ENCODED_EXPONENT: u32 = 626;
pub const DIVIDING_BY_ZERO: u32 = 641;
pub const INVERSE_DOES_NOT_EXIST: u32 = 642;
pub const NON_INTEGER_POWER_NON_POSITIVE: u32 = 643;
pub const ZERO_TH_ROOT: u32 = 644;
pub const EVEN_ROOT_NEGATIVE: u32 = 645;
pub const ODD_ROOT_ZERO: u32 = 646;
pub const LOG_NON_POSITIVE: u32 = 647;
pub const LOG_BASE_POSITIVE: u32 = 648;
pub const COS_ZERO_IN_TANGENT: u32 = 649;
pub const TOO_MANY_VARIABLES: u32 = 165;
pub const OUT_OF_DOMAIN: u32 = 650;
}