use crate::pin::Pin; use crate::async_iter::AsyncIterator; use crate::task::{Context, Poll}; /// An async iterator that was created from iterator. /// /// This async iterator is created by the [`from_iter`] function. /// See it documentation for more. /// /// [`from_iter`]: fn.from_iter.html #[unstable(feature = "async_iter_from_iter", issue = "81798")] #[derive(Clone, Debug)] pub struct FromIter { iter: I, } #[unstable(feature = "async_iter_from_iter", issue = "81798")] impl Unpin for FromIter {} /// Converts an iterator into an async iterator. #[unstable(feature = "async_iter_from_iter", issue = "81798")] pub fn from_iter(iter: I) -> FromIter { FromIter { iter: iter.into_iter() } } #[unstable(feature = "async_iter_from_iter", issue = "81798")] impl AsyncIterator for FromIter { type Item = I::Item; fn poll_next(mut self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll> { Poll::Ready(self.iter.next()) } fn size_hint(&self) -> (usize, Option) { self.iter.size_hint() } }