async_std/stream/
from_iter.rs1use core::pin::Pin;
2
3use pin_project_lite::pin_project;
4
5use crate::stream::Stream;
6#[cfg(feature = "unstable")]
7use crate::stream::double_ended_stream::DoubleEndedStream;
8use crate::task::{Context, Poll};
9
10pin_project! {
11 #[derive(Clone, Debug)]
18 pub struct FromIter<I> {
19 iter: I,
20 }
21}
22
23pub fn from_iter<I: IntoIterator>(iter: I) -> FromIter<I::IntoIter> {
44 FromIter {
45 iter: iter.into_iter(),
46 }
47}
48
49impl<I: Iterator> Stream for FromIter<I> {
50 type Item = I::Item;
51
52 fn poll_next(mut self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {
53 Poll::Ready(self.iter.next())
54 }
55}
56
57#[cfg(feature = "unstable")]
58impl<T: DoubleEndedIterator> DoubleEndedStream for FromIter<T> {
59 fn poll_next_back(mut self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Option<T::Item>> {
60 Poll::Ready(self.iter.next_back())
61 }
62}