Rollup merge of #105526 - Xiretza:iter-from-generator-derive, r=scottmcm
libcore: make result of iter::from_generator Clone `@rustbot` label +A-generators
This commit is contained in:
commit
085d2f1f09
@ -1,3 +1,4 @@
|
||||
use crate::fmt;
|
||||
use crate::ops::{Generator, GeneratorState};
|
||||
use crate::pin::Pin;
|
||||
|
||||
@ -23,14 +24,21 @@
|
||||
/// ```
|
||||
#[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")]
|
||||
#[derive(Clone)]
|
||||
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 +49,10 @@ fn next(&mut self) -> Option<Self::Item> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[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