pub trait ErrorHelper {
type Error;
fn err(&self, msg: impl Into<String>) -> Self::Error;
fn fail<T>(&self, msg: impl Into<String>) -> Result<T, Self::Error> {
Err(self.err(msg))
}
fn unwrap<T>(&self, opt: Option<T>, msg: impl Into<String>) -> Result<T, Self::Error> {
match opt {
Some(val) => Ok(val),
None => self.fail(msg),
}
}
fn assert(&self, b: bool) -> Result<(), Self::Error> {
match b {
true => Ok(()),
false => self.fail("assertion failed"),
}
}
fn ok<T, E>(&self, _res: Result<T, E>, msg: impl Into<String>) -> Result<T, Self::Error>
where
E: std::error::Error + 'static,
{
self.fail(msg) }
}
#[derive(Debug, Clone)]
pub enum ErrorContext {
Library(String),
Cell(String),
Abstract,
Impl,
Instance(String),
Array(String),
Units,
Geometry,
Unknown,
}