use ic_cdk::trap;
use std::fmt::Display;
pub trait UnwrapOrTrap<T> {
fn unwrap_or_trap(self) -> T;
}
impl<T, E: Display> UnwrapOrTrap<T> for Result<T, E> {
#[inline]
fn unwrap_or_trap(self) -> T {
self.unwrap_or_else(|e| trap(e.to_string()))
}
}
impl<T> UnwrapOrTrap<T> for Option<T> {
#[inline]
fn unwrap_or_trap(self) -> T {
self.unwrap_or_else(|| trap("Expected a result to return but got none"))
}
}
pub trait UnwrapOrTrapResult<T> {
fn unwrap_or_trap_result(self) -> T;
}
impl<T, E: Display> UnwrapOrTrapResult<T> for Result<Option<T>, E> {
#[inline]
fn unwrap_or_trap_result(self) -> T {
self.unwrap_or_trap().unwrap_or_trap()
}
}