pub trait IntoInner {
type Inner;
fn into_inner(self) -> Self::Inner;
}
pub trait RawWrapper {
type Item;
}
pub trait Wrapper: RawWrapper {
fn new(value: Self::Item) -> Self;
fn value(self) -> Self::Item;
fn get(&self) -> &Self::Item;
fn get_mut(&mut self) -> &mut Self::Item;
fn replace(&mut self, value: Self::Item) -> Self::Item {
core::mem::replace(self.get_mut(), value)
}
fn set(&mut self, value: Self::Item) -> &mut Self {
*self.get_mut() = value;
self
}
fn swap(&mut self, other: &mut Self) {
core::mem::swap(self.get_mut(), other.get_mut())
}
fn take(&mut self) -> Self::Item
where
Self::Item: Default,
{
core::mem::take(self.get_mut())
}
}