#[derive(Debug, Clone)]
pub(crate) enum Boo<'a, T: Sized> {
Borrowed(&'a T),
Owned(T),
}
impl<'a, T: Sized> Boo<'a, T> {
pub fn get_ref(&'a self) -> &'a T {
match self {
Boo::Borrowed(obj) => *obj,
Boo::Owned(obj) => obj,
}
}
}
impl<'a, T: Sized> From<T> for Boo<'a, T> {
fn from(value: T) -> Self {
Self::Owned(value)
}
}
impl<'a, T: Sized> From<&'a T> for Boo<'a, T> {
fn from(value: &'a T) -> Self {
Self::Borrowed(value)
}
}
impl<'a, T: Sized> std::ops::Deref for Boo<'a, T> {
type Target = T;
fn deref(&self) -> &Self::Target {
self.get_ref()
}
}