use std::fmt::Debug;
pub trait UnwrapOptionExt<T> {
fn unwrap_release_unsafe(self) -> T;
}
impl<T> UnwrapOptionExt<T> for Option<T> {
#[inline(always)]
fn unwrap_release_unsafe(self) -> T {
if cfg!(debug_assertions) {
self.unwrap()
} else {
unsafe { self.unwrap_unchecked() }
}
}
}
pub trait UnwrapResultExt<T, E> {
fn unwrap_release_unsafe(self) -> T;
fn unwrap_err_release_unsafe(self) -> E;
}
impl<T: Debug, E: Debug> UnwrapResultExt<T, E> for Result<T, E> {
#[inline(always)]
fn unwrap_release_unsafe(self) -> T {
if cfg!(debug_assertions) {
self.unwrap()
} else {
unsafe { self.unwrap_unchecked() }
}
}
#[inline(always)]
fn unwrap_err_release_unsafe(self) -> E {
if cfg!(debug_assertions) {
self.unwrap_err()
} else {
unsafe { self.unwrap_err_unchecked() }
}
}
}