pub trait Take<T>{
fn take(self) -> T;
fn try_take(self) -> Option<T>;
fn take_or_clone(self) -> T where T: Clone;
}
impl<T> Take<T> for T{
#[inline]
fn take(self) -> T{
self
}
#[inline]
fn try_take(self) -> Option<T>{
Some(self)
}
#[inline]
fn take_or_clone(self) -> T{
self
}
}
impl<T> Take<T> for &T{
#[inline]
fn take(self) -> T{
const{ panic!("Trying to take &T by value.") }
}
#[inline]
fn try_take(self) -> Option<T>{
None
}
#[inline]
fn take_or_clone(self) -> T where T: Clone{
self.clone()
}
}