use std::fmt;
pub type Result<T> = std::result::Result<T, Error>;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Error {
Domain(String),
Shape(String),
Operator(String),
Ir(String),
Backend(String),
Verification(String),
}
impl Error {
pub fn domain(message: impl Into<String>) -> Self {
Self::Domain(message.into())
}
pub fn shape(message: impl Into<String>) -> Self {
Self::Shape(message.into())
}
pub fn operator(message: impl Into<String>) -> Self {
Self::Operator(message.into())
}
pub fn ir(message: impl Into<String>) -> Self {
Self::Ir(message.into())
}
pub fn backend(message: impl Into<String>) -> Self {
Self::Backend(message.into())
}
pub fn verification(message: impl Into<String>) -> Self {
Self::Verification(message.into())
}
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Error::Domain(message) => write!(f, "domain error: {message}"),
Error::Shape(message) => write!(f, "shape error: {message}"),
Error::Operator(message) => write!(f, "operator error: {message}"),
Error::Ir(message) => write!(f, "ir error: {message}"),
Error::Backend(message) => write!(f, "backend error: {message}"),
Error::Verification(message) => {
write!(f, "verification error: {message}")
}
}
}
}
impl std::error::Error for Error {}