]> git.lizzy.rs Git - rust.git/blob - library/core/src/async_iter/from_iter.rs
Rollup merge of #102445 - jmillikin:cstr-is-empty, r=Mark-Simulacrum
[rust.git] / library / core / src / async_iter / from_iter.rs
1 use crate::pin::Pin;
2
3 use crate::async_iter::AsyncIterator;
4 use crate::task::{Context, Poll};
5
6 /// An async iterator that was created from iterator.
7 ///
8 /// This async iterator is created by the [`from_iter`] function.
9 /// See it documentation for more.
10 ///
11 /// [`from_iter`]: fn.from_iter.html
12 #[unstable(feature = "async_iter_from_iter", issue = "81798")]
13 #[derive(Clone, Debug)]
14 pub struct FromIter<I> {
15     iter: I,
16 }
17
18 #[unstable(feature = "async_iter_from_iter", issue = "81798")]
19 impl<I> Unpin for FromIter<I> {}
20
21 /// Converts an iterator into an async iterator.
22 #[unstable(feature = "async_iter_from_iter", issue = "81798")]
23 pub fn from_iter<I: IntoIterator>(iter: I) -> FromIter<I::IntoIter> {
24     FromIter { iter: iter.into_iter() }
25 }
26
27 #[unstable(feature = "async_iter_from_iter", issue = "81798")]
28 impl<I: Iterator> AsyncIterator for FromIter<I> {
29     type Item = I::Item;
30
31     fn poll_next(mut self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {
32         Poll::Ready(self.iter.next())
33     }
34
35     fn size_hint(&self) -> (usize, Option<usize>) {
36         self.iter.size_hint()
37     }
38 }