use crate::pretty_type_name;
pub trait OptionExt<T> {
fn unpack(self) -> T;
fn unpack_ref(&self) -> &T;
fn unpack_ref_mut(&mut self) -> &mut T;
}
impl<T> OptionExt<T> for Option<T> {
#[track_caller]
fn unpack(self) -> T {
match self {
Some(v) => v,
None => panic!(
"Got `None` value when calling `OptionExt::unpack()` on `{type_name}`",
type_name = pretty_type_name::<Self>()
),
}
}
fn unpack_ref(&self) -> &T {
self.as_ref().unpack()
}
fn unpack_ref_mut(&mut self) -> &mut T {
self.as_mut().unpack()
}
}