yield_return/
lib.rs

1//! This crate provides a way to implement something like C#'s `yield return` using an asynchronous function.
2//!
3//! # Example
4//!
5//! ```
6//! use yield_return::Yield;
7//! let iter = Yield::new(|mut y| async move {
8//!     y.ret(1).await;
9//!     y.ret(2).await;
10//! });
11//! let list: Vec<_> = iter.collect();
12//! assert_eq!(list, vec![1, 2]);
13//! ```
14//!
15//! ## Available Types
16//!
17//! This crate provides several iterator types that differ based on two characteristics:
18//!
19//! - Whether they implement [`Iterator`] or [`Stream`]
20//! - Whether they require and implement [`Send`]
21//!
22//! The following table shows the available types:
23//!
24//! |              | `Send`        | Not `Send`       |
25//! | ------------ | ------------- | ------------------ |
26//! | [`Iterator`] | [`Iter`]      | [`LocalIter`]      |
27//! | [`Stream`]   | [`AsyncIter`] | [`LocalAsyncIter`] |
28//!
29//! [`Stream`]: futures_core::stream::Stream
30
31mod iter;
32mod local_iter;
33mod utils;
34
35#[cfg(doctest)]
36mod tests_readme;
37
38pub use iter::{AsyncIter, AsyncIterContext, Iter, IterContext};
39pub use local_iter::{LocalAsyncIter, LocalAsyncIterContext, LocalIter, LocalIterContext};
40
41#[deprecated(since = "0.2.0", note = "Use `LocalIter` instead.")]
42pub type Yield<'a, T> = LocalIter<'a, T>;
43
44#[deprecated(since = "0.2.0", note = "Use `LocalIterContext` instead.")]
45pub type YieldContext<T> = LocalIterContext<T>;