concision_core/
error.rs

1/*
2    Appellation: error <module>
3    Contrib: @FL03
4*/
5
6/// a type alias for a [Result] with a [Error]
7pub type Result<T = ()> = core::result::Result<T, Error>;
8
9#[derive(Debug, thiserror::Error)]
10pub enum Error {
11    #[error("Invalid Shape: {0}")]
12    InvalidShape(&'static str),
13    #[error("Unknown Error: {0}")]
14    Unknown(&'static str),
15    #[error(transparent)]
16    MathError(#[from] concision_utils::UtilityError),
17    #[error(transparent)]
18    PadError(#[from] crate::ops::pad::error::PadError),
19    #[error(transparent)]
20    ParamError(#[from] crate::params::error::ParamsError),
21    #[error(transparent)]
22    ShapeError(#[from] ndarray::ShapeError),
23    #[cfg(feature = "alloc")]
24    #[error(transparent)]
25    BoxError(#[from] alloc::boxed::Box<dyn core::error::Error + Send + Sync + 'static>),
26    #[cfg(feature = "anyhow")]
27    #[error(transparent)]
28    Other(#[from] anyhow::Error),
29    #[cfg(feature = "serde")]
30    #[error(transparent)]
31    DeserializeError(#[from] serde::de::value::Error),
32    #[cfg(feature = "std")]
33    #[error(transparent)]
34    IoError(#[from] std::io::Error),
35    #[cfg(feature = "rand")]
36    #[error(transparent)]
37    UniformError(#[from] rand_distr::uniform::Error),
38}
39
40#[cfg(feature = "alloc")]
41impl From<alloc::string::String> for Error {
42    fn from(value: alloc::string::String) -> Self {
43        Self::Unknown(alloc::boxed::Box::leak(value.into_boxed_str()))
44    }
45}
46
47impl From<&'static str> for Error {
48    fn from(value: &'static str) -> Self {
49        Self::Unknown(value)
50    }
51}