use super::DisposeWith;
pub trait Dispose {
fn dispose(self);
}
impl<F: FnOnce()> Dispose for F {
fn dispose(self) { self() }
}
impl<W, T: DisposeWith<W>> Dispose for (W, T)
where (W, T): Sized
{
fn dispose(self) { self.1.dispose_with(self.0) }
}
pub trait DisposeIterator {
fn dispose_iter(self);
}
impl<I: IntoIterator> DisposeIterator for I
where I::Item: Dispose
{
fn dispose_iter(self) {
for el in self {
el.dispose()
}
}
}
impl<T> Dispose for Vec<T>
where Vec<T>: DisposeIterator
{
fn dispose(self) { self.dispose_iter() }
}
impl<T> Dispose for Box<[T]>
where Vec<T>: DisposeIterator
{
fn dispose(self) { self.into_vec().dispose_iter() }
}
impl<'a, T> Dispose for &'a [T]
where &'a [T]: DisposeIterator
{
fn dispose(self) { self.dispose_iter() }
}