#[macro_export]
macro_rules! e {
($($err:tt)::+) => {
$($err)::+ { meta: $crate::Meta::default() }
};
($($err:tt)::+ , $source:expr) => {
$($err)::+ { source: $source, meta: $crate::Meta::default() }
};
($($err:tt)::+ { $($body:tt)* }, $source:expr) => {
$($err)::+ { meta: $crate::Meta::default(), source: $source, $($body)* }
};
($($err:tt)::+ { $($body:tt)* }) => {
$($err)::+ { meta: $crate::Meta::default(), $($body)* }
};
}
#[doc(hidden)]
pub use spez as __spez;
#[macro_export]
macro_rules! anyerr {
($fmt:literal$(, $($arg:expr),* $(,)?)?) => {
$crate::anyerr!(::std::format!($fmt$(, $($arg),*)*))
};
($err:expr, $fmt:literal$(, $($arg:expr),* $(,)?)?) => {
$crate::anyerr!($err).context(format!($fmt$(, $($arg),*)*))
};
($err:expr) => {
$crate::__spez::spez! {
for err = $err;
match $crate::AnyError -> $crate::AnyError {
err
}
match<T: $crate::StackError + 'static> T -> $crate::AnyError {
$crate::AnyError::from_stack(err)
}
match<T: ::std::error::Error + Send + Sync + 'static> T -> $crate::AnyError {
$crate::AnyError::from_std(err)
}
match <T: ::std::fmt::Display> T -> $crate::AnyError {
$crate::AnyError::from_display(err)
}
}
};
}
#[macro_export]
macro_rules! ensure {
($predicate:expr, $($tt:tt)*) => {
if !$predicate {
$crate::bail!($($tt)*)
}
};
}
#[macro_export]
macro_rules! ensure_any {
($cond:expr, $($tt:tt)*) => {
if !$cond {
$crate::bail_any!($($tt)*)
}
};
}
#[macro_export]
macro_rules! bail {
($($tt:tt)*) => {
return ::core::result::Result::Err($crate::e!($($tt)*).into())
}
}
#[macro_export]
macro_rules! bail_any {
($($tt:tt)*) => {
return ::core::result::Result::Err($crate::anyerr!($($tt)*).into())
}
}
#[macro_export]
macro_rules! try_or {
($result:expr, $($tt:tt)*) => {
match $result {
::core::result::Result::Ok(v) => v,
::core::result::Result::Err(e) => {
return ::core::result::Result::Err($crate::e!($($tt)*, e));
}
}
};
}
#[macro_export]
macro_rules! try_or_any {
($result:expr, $($context:tt)*) => {
match $result {
::core::result::Result::Ok(v) => v,
::core::result::Result::Err(e) => {
return ::core::result::Result::Err($crate::anyerr!(e, $($context)*));
}
}
};
}