use std::fmt;
#[derive(Debug)]
pub enum Berror {
NA,
None(Option<String>),
Is(String),
}
impl fmt::Display for Berror {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::NA => write!(f, "NA"),
Self::None(e) => {
if let Some(e) = e.as_ref() { write!(f, "None({})", e) }
else { write!(f, "None") }
},
Self::Is(e) => write!(f, "{}", e),
}
}
}
impl std::error::Error for Berror {}
#[macro_export]
macro_rules! na {
() => { Berror::NA }
}
#[macro_export]
macro_rules! none {
() => { Berror::None(None) };
($e:expr) => { Berror::None(Some(format!("{:?}", $e))) };
}
#[macro_export]
macro_rules! err_is {
($e:expr) => { Berror::Is(format!("{:?}", $e)) }
}