use core::hint::unreachable_unchecked;
pub trait UncheckedOptionExt<T> {
unsafe fn unwrap_unchecked(self) -> T;
unsafe fn unwrap_none_unchecked(self);
}
pub trait UncheckedResultExt<T, E> {
unsafe fn unwrap_unchecked(self) -> T;
unsafe fn unwrap_err_unchecked(self) -> E;
}
unsafe fn unreachable() -> ! {
debug_assert!(false);
unreachable_unchecked()
}
impl<T> UncheckedOptionExt<T> for Option<T> {
unsafe fn unwrap_unchecked(self) -> T {
if let Some(t) = self { t } else { unreachable() }
}
unsafe fn unwrap_none_unchecked(self) {
if self.is_some() {
unreachable()
}
}
}
impl<T, E> UncheckedResultExt<T, E> for Result<T, E> {
unsafe fn unwrap_unchecked(self) -> T {
if let Ok(t) = self { t } else { unreachable() }
}
unsafe fn unwrap_err_unchecked(self) -> E {
if let Err(t) = self { t } else { unreachable() }
}
}