1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
use crate::internal_iter::{ExtendFromInternalIterator, IntoInternalIterator};
/// A trait for conversion from an internal iterator.
///
/// This trait is commonly implemented for collections. It is useful when you have an internal
/// iterator but you need a collection.
pub trait FromInternalIterator<T> {
/// Creates `Self` from an internal iterator.
///
/// Note that `from_internal_iter` is almost never used directly. Instead, it is used by
/// calling the `collect` method on `InternalIterator`.
fn from_internal_iter<I>(internal_iter: I) -> Self
where
I: IntoInternalIterator<Item = T>;
}
impl<T> FromInternalIterator<T> for Vec<T> {
fn from_internal_iter<I>(internal_iter: I) -> Self
where
I: IntoInternalIterator<Item = T>,
{
let mut vec = Vec::new();
vec.extend_from_internal_iter(internal_iter);
vec
}
}