File tree Expand file tree Collapse file tree 3 files changed +16
-9
lines changed Expand file tree Collapse file tree 3 files changed +16
-9
lines changed Original file line number Diff line number Diff line change @@ -3,7 +3,7 @@ use core::iter::Iterator;
3
3
use core:: marker:: Unpin ;
4
4
use core:: pin:: Pin ;
5
5
6
- /// a iterator that holds an internal generator representing
6
+ /// an iterator that holds an internal generator representing
7
7
/// the iteration state
8
8
#[ derive( Copy , Clone , Debug ) ]
9
9
pub struct GenIter < T > ( pub T )
Original file line number Diff line number Diff line change @@ -3,7 +3,8 @@ use core::iter::{Iterator, FusedIterator};
3
3
use core:: marker:: Unpin ;
4
4
use core:: pin:: Pin ;
5
5
6
- /// `GenIterReturn<G>` is a iterator for generator with return value.
6
+ /// `GenIterReturn<G>` holds a generator `G` or the return value of `G`,
7
+ /// `&mut GenIterReturn<G>` acts as an iterator.
7
8
///
8
9
/// Differences with `GenIter<G>`:
9
10
/// 1. able to get return value of a generator
@@ -35,11 +36,12 @@ impl<G: Generator + Unpin> GenIterReturn<G> {
35
36
/// Force use `&mut g` as iterator to prevent the code below,
36
37
/// in which return value cannot be got.
37
38
/// ```compile_fail
39
+ /// // !!INVALID CODE!!
38
40
/// # #![feature(generators)]
39
41
/// # use gen_iter::gen_iter_return;
40
- /// let mut g = gen_iter_return!({ yield 1; return "done"; }
42
+ /// let mut g = gen_iter_return!({ yield 1; return "done"; });
41
43
/// for v in g {} // invalid, because `GenIterReturn<G>` is not `Iterator`
42
- /// let ret = g.return_or_self().unwrap() ; // g is dropped after for
44
+ /// let ret = g.return_or_self(); // g is dropped after for loop
43
45
/// ```
44
46
impl < G : Generator + Unpin > Iterator for & mut GenIterReturn < G > {
45
47
type Item = G :: Yield ;
Original file line number Diff line number Diff line change 1
1
//! # gen_iter - create generators to use as iterators
2
2
//!
3
- //! `GenIter` converts a generator into an iterator over the
3
+ //! ## [`GenIter`] and [`gen_iter!`]
4
+ //! [`GenIter`] converts a [`Generator<(), Return=()>`](core::ops::Generator) into an iterator over the
4
5
//! yielded type of the generator. The return type of the generator needs to be `()`.
6
+ //!
7
+ //! [`gen_iter!`] helps to create a [`GenIter`]
5
8
//!
6
9
//! ```
7
10
//! #![feature(generators)]
8
- //! #![feature(conservative_impl_trait)]
9
11
//!
10
12
//! use gen_iter::gen_iter;
11
13
//!
29
31
//! }
30
32
//! ```
31
33
//!
32
- //! `GenIterReturn` can be converted from a `Generator<()>`,
33
- //! `&mut GenIterReturn` can be used as iterator.
34
- //! The return value of the generator can be got after the iterator is done.
34
+ //! ## [`GenIterReturn`] and [`gen_iter_return!`]
35
+ //! [`GenIterReturn`] can be converted from a [`Generator<()>`](core::ops::Generator),
36
+ //! `&mut GenIterReturn<G>` can be used as iterator.
37
+ //! The return value of the generator can be got after the iterator is exhausted.
38
+ //!
39
+ //! [`gen_iter_return!`] helps to create a [`GenIterReturn`].
35
40
//!
36
41
//! ```
37
42
//! #![feature(generators)]
You can’t perform that action at this time.
0 commit comments