mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-01 06:51:58 +00:00
libcore: make result type of iter::from_generator concrete
This allows for propagating trait impls on the iterator type.
This commit is contained in:
parent
0d5573e6da
commit
a8b5d4b7f1
@ -1,3 +1,4 @@
|
||||
use crate::fmt;
|
||||
use crate::ops::{Generator, GeneratorState};
|
||||
use crate::pin::Pin;
|
||||
|
||||
@ -23,14 +24,20 @@ use crate::pin::Pin;
|
||||
/// ```
|
||||
#[inline]
|
||||
#[unstable(feature = "iter_from_generator", issue = "43122", reason = "generators are unstable")]
|
||||
pub fn from_generator<G: Generator<Return = ()> + Unpin>(
|
||||
generator: G,
|
||||
) -> impl Iterator<Item = G::Yield> {
|
||||
pub fn from_generator<G: Generator<Return = ()> + Unpin>(generator: G) -> FromGenerator<G> {
|
||||
FromGenerator(generator)
|
||||
}
|
||||
|
||||
struct FromGenerator<G>(G);
|
||||
/// An iterator over the values yielded by an underlying generator.
|
||||
///
|
||||
/// This `struct` is created by the [`iter::from_generator()`] function. See its documentation for
|
||||
/// more.
|
||||
///
|
||||
/// [`iter::from_generator()`]: from_generator
|
||||
#[unstable(feature = "iter_from_generator", issue = "43122", reason = "generators are unstable")]
|
||||
pub struct FromGenerator<G>(G);
|
||||
|
||||
#[unstable(feature = "iter_from_generator", issue = "43122", reason = "generators are unstable")]
|
||||
impl<G: Generator<Return = ()> + Unpin> Iterator for FromGenerator<G> {
|
||||
type Item = G::Yield;
|
||||
|
||||
@ -41,3 +48,10 @@ impl<G: Generator<Return = ()> + Unpin> Iterator for FromGenerator<G> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "iter_from_generator", issue = "43122", reason = "generators are unstable")]
|
||||
impl<G> fmt::Debug for FromGenerator<G> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
f.debug_struct("FromGenerator").finish()
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user