#[macro_export]
macro_rules! strict_assert {
($($arg:tt)*) => {
#[cfg(feature = "strict_assertions")]
assert!($($arg)*);
#[cfg(not(feature = "strict_assertions"))]
debug_assert!($($arg)*);
}
}
#[macro_export]
macro_rules! strict_assert_eq {
($($arg:tt)*) => {
#[cfg(feature = "strict_assertions")]
assert_eq!($($arg)*);
#[cfg(not(feature = "strict_assertions"))]
debug_assert_eq!($($arg)*);
}
}
#[macro_export]
macro_rules! strict_assert_ne {
($($arg:tt)*) => {
#[cfg(feature = "strict_assertions")]
assert_ne!($($arg)*);
#[cfg(not(feature = "strict_assertions"))]
debug_assert_ne!($($arg)*);
}
}
pub trait OptionExt<T>: Sized {
unsafe fn strict_unwrap_unchecked(self) -> T;
}
impl<T> OptionExt<T> for Option<T> {
unsafe fn strict_unwrap_unchecked(self) -> T {
#[cfg(feature = "strict_assertions")]
{
self.unwrap()
}
#[cfg(not(feature = "strict_assertions"))]
{
unsafe { self.unwrap_unchecked() }
}
}
}