#[macro_export]
#[doc(hidden)]
macro_rules! err {
($fmt: expr, $($arg:tt)*) => ( std::io::Error::new(std::io::ErrorKind::InvalidInput, format!($fmt, $($arg)*)) );
($msg: literal) => ( Error::new(ErrorKind::InvalidInput, $msg) );
}
#[macro_export]
#[doc(hidden)]
macro_rules! ensure {
($expr: expr, $msg: literal $(,)?) => ( if !$expr { bail!($msg); } );
($expr: expr, $fmt: expr, $($arg:tt)*) => ( if !$expr { bail!($fmt, $($arg)*); } );
}
#[macro_export]
#[doc(hidden)]
macro_rules! bail {
($fmt: expr, $($arg:tt)*) => ( return Err(err!($fmt, $($arg)*)) );
($msg: literal) => ( return Err(err!($msg)); );
}