Add IntoAsyncIterator
This commit is contained in:
parent
208dd2032b
commit
8e34391d6a
@ -135,3 +135,25 @@ impl<T> Poll<Option<T>> {
|
||||
#[cfg_attr(not(bootstrap), lang = "AsyncGenFinished")]
|
||||
pub const FINISHED: Self = Poll::Ready(None);
|
||||
}
|
||||
|
||||
/// Convert something into an async iterator
|
||||
#[unstable(feature = "async_iterator", issue = "79024")]
|
||||
pub trait IntoAsyncIterator {
|
||||
/// The type of the item yielded by the iterator
|
||||
type Item;
|
||||
/// The type of the resulting iterator
|
||||
type IntoAsyncIter: AsyncIterator<Item = Self::Item>;
|
||||
|
||||
/// Converts `self` into an async iterator
|
||||
fn into_async_iter(self) -> Self::IntoAsyncIter;
|
||||
}
|
||||
|
||||
#[unstable(feature = "async_iterator", issue = "79024")]
|
||||
impl<I: AsyncIterator> IntoAsyncIterator for I {
|
||||
type Item = I::Item;
|
||||
type IntoAsyncIter = I;
|
||||
|
||||
fn into_async_iter(self) -> Self::IntoAsyncIter {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
@ -124,5 +124,5 @@
|
||||
mod async_iter;
|
||||
mod from_iter;
|
||||
|
||||
pub use async_iter::AsyncIterator;
|
||||
pub use async_iter::{AsyncIterator, IntoAsyncIterator};
|
||||
pub use from_iter::{from_iter, FromIter};
|
||||
|
17
library/core/tests/async_iter/mod.rs
Normal file
17
library/core/tests/async_iter/mod.rs
Normal file
@ -0,0 +1,17 @@
|
||||
use core::async_iter::{self, AsyncIterator, IntoAsyncIterator};
|
||||
use core::pin::pin;
|
||||
use core::task::Poll;
|
||||
|
||||
#[test]
|
||||
fn into_async_iter() {
|
||||
let async_iter = async_iter::from_iter(0..3);
|
||||
let mut async_iter = pin!(async_iter.into_async_iter());
|
||||
|
||||
let waker = core::task::Waker::noop();
|
||||
let mut cx = &mut core::task::Context::from_waker(&waker);
|
||||
|
||||
assert_eq!(async_iter.as_mut().poll_next(&mut cx), Poll::Ready(Some(0)));
|
||||
assert_eq!(async_iter.as_mut().poll_next(&mut cx), Poll::Ready(Some(1)));
|
||||
assert_eq!(async_iter.as_mut().poll_next(&mut cx), Poll::Ready(Some(2)));
|
||||
assert_eq!(async_iter.as_mut().poll_next(&mut cx), Poll::Ready(None));
|
||||
}
|
@ -4,6 +4,8 @@
|
||||
#![feature(array_windows)]
|
||||
#![feature(ascii_char)]
|
||||
#![feature(ascii_char_variants)]
|
||||
#![feature(async_iter_from_iter)]
|
||||
#![feature(async_iterator)]
|
||||
#![feature(bigint_helper_methods)]
|
||||
#![feature(cell_update)]
|
||||
#![feature(const_align_offset)]
|
||||
@ -55,6 +57,7 @@
|
||||
#![feature(maybe_uninit_write_slice)]
|
||||
#![feature(maybe_uninit_uninit_array_transpose)]
|
||||
#![feature(min_specialization)]
|
||||
#![feature(noop_waker)]
|
||||
#![feature(numfmt)]
|
||||
#![feature(num_midpoint)]
|
||||
#![feature(isqrt)]
|
||||
@ -126,6 +129,7 @@ mod any;
|
||||
mod array;
|
||||
mod ascii;
|
||||
mod asserting;
|
||||
mod async_iter;
|
||||
mod atomic;
|
||||
mod bool;
|
||||
mod cell;
|
||||
|
Loading…
x
Reference in New Issue
Block a user