pub trait IntoExactSizeIterator: IntoIterator {
type IntoExactSizeIter: ExactSizeIterator<Item = Self::Item>;
fn into_exact_size_iter(self) -> Self::IntoExactSizeIter;
}
impl<I> IntoExactSizeIterator for I
where
I: IntoIterator,
I::IntoIter: ExactSizeIterator,
{
type IntoExactSizeIter = I::IntoIter;
fn into_exact_size_iter(self) -> Self::IntoExactSizeIter {
self.into_iter()
}
}
pub trait FromExactSizeIterator<A>: Sized {
fn from_iter<T: IntoExactSizeIterator<Item = A>>(iter: T) -> Self;
}
pub trait TryFromExactSizeIterator<A>: Sized {
type Error;
fn try_from_iter<T: IntoExactSizeIterator<Item = A>>(iter: T) -> Result<Self, Self::Error>;
}