yield-return

Crates.ioyield-return
lib.rsyield-return
version0.2.0
created_at2023-04-21 01:21:14.736998+00
updated_at2025-01-10 10:47:31.74608+00
descriptionImplement a coroutine like C#'s `yield return` using Rust's `async`, `await`.
homepage
repositoryhttps://github.com/frozenlib/yield-return-rs
max_upload_size
id844901
size54,764
frozenlib (frozenlib)

documentation

https://docs.rs/yield-return/

README

yield-return-rs

Crates.io Docs.rs Actions Status

Implement a coroutine like C#'s yield return using Rust's async, await.

Example

use yield_return::Iter;
let iter = Iter::new(|mut y| async move {
    y.ret(1).await;
    y.ret(2).await;
});
let list: Vec<_> = iter.collect();
assert_eq!(list, vec![1, 2]);

Available Types

This crate provides several iterator types that differ based on two characteristics:

  • Whether they implement Iterator or Stream
  • Whether they require and implement Send

The following table shows the available types:

Send Not Send
Iterator Iter LocalIter
Stream AsyncIter LocalAsyncIter

Compare with other crates

While async-stream and genawaiter serve similar purposes, yield-return focuses on usability over performance. This design philosophy is reflected in two key characteristics:

  • Type parameters only expose the external interface, not implementation details
  • Clean API using only types and functions (no macros)

License

This project is dual licensed under Apache-2.0/MIT. See the two LICENSE-* files for details.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Commit count: 32

cargo fmt