Skip to content

Commit

Permalink
beautify doc
Browse files Browse the repository at this point in the history
  • Loading branch information
viruscamp committed Mar 23, 2022
1 parent 356e526 commit a0bc917
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 9 deletions.
2 changes: 1 addition & 1 deletion src/gen_iter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use core::iter::Iterator;
use core::marker::Unpin;
use core::pin::Pin;

/// a iterator that holds an internal generator representing
/// an iterator that holds an internal generator representing
/// the iteration state
#[derive(Copy, Clone, Debug)]
pub struct GenIter<T>(pub T)
Expand Down
8 changes: 5 additions & 3 deletions src/gen_iter_return.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ use core::iter::{Iterator, FusedIterator};
use core::marker::Unpin;
use core::pin::Pin;

/// `GenIterReturn<G>` is a iterator for generator with return value.
/// `GenIterReturn<G>` holds a generator `G` or the return value of `G`,
/// `&mut GenIterReturn<G>` acts as an iterator.
///
/// Differences with `GenIter<G>`:
/// 1. able to get return value of a generator
Expand Down Expand Up @@ -35,11 +36,12 @@ impl<G: Generator + Unpin> GenIterReturn<G> {
/// Force use `&mut g` as iterator to prevent the code below,
/// in which return value cannot be got.
/// ```compile_fail
/// // !!INVALID CODE!!
/// # #![feature(generators)]
/// # use gen_iter::gen_iter_return;
/// let mut g = gen_iter_return!({ yield 1; return "done"; }
/// let mut g = gen_iter_return!({ yield 1; return "done"; });
/// for v in g {} // invalid, because `GenIterReturn<G>` is not `Iterator`
/// let ret = g.return_or_self().unwrap(); // g is dropped after for
/// let ret = g.return_or_self(); // g is dropped after for loop
/// ```
impl<G: Generator + Unpin> Iterator for &mut GenIterReturn<G> {
type Item = G::Yield;
Expand Down
15 changes: 10 additions & 5 deletions src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
//! # gen_iter - create generators to use as iterators
//!
//! `GenIter` converts a generator into an iterator over the
//! ## [`GenIter`] and [`gen_iter!`]
//! [`GenIter`] converts a [`Generator<(), Return=()>`](core::ops::Generator) into an iterator over the
//! yielded type of the generator. The return type of the generator needs to be `()`.
//!
//! [`gen_iter!`] helps to create a [`GenIter`]
//!
//! ```
//! #![feature(generators)]
//! #![feature(conservative_impl_trait)]
//!
//! use gen_iter::gen_iter;
//!
Expand All @@ -29,9 +31,12 @@
//! }
//! ```
//!
//! `GenIterReturn` can be converted from a `Generator<()>`,
//! `&mut GenIterReturn` can be used as iterator.
//! The return value of the generator can be got after the iterator is done.
//! ## [`GenIterReturn`] and [`gen_iter_return!`]
//! [`GenIterReturn`] can be converted from a [`Generator<()>`](core::ops::Generator),
//! `&mut GenIterReturn<G>` can be used as iterator.
//! The return value of the generator can be got after the iterator is exhausted.
//!
//! [`gen_iter_return!`] helps to create a [`GenIterReturn`].
//!
//! ```
//! #![feature(generators)]
Expand Down

0 comments on commit a0bc917

Please sign in to comment.