asynk-strim

Crates.ioasynk-strim
lib.rsasynk-strim
version
sourcesrc
created_at2024-10-07 12:53:15.907558
updated_at2024-10-09 00:30:38.891894
descriptionLightweight stream generator library
homepage
repositoryhttps://github.com/aumetra/asynk-strim.git
max_upload_size
id1399947
Cargo.toml error:TOML parse error at line 25, column 1 | 25 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include`
size0
Aumetra Weisman (aumetra)

documentation

README

asynk-strim

Like async-stream but without macros. Like async-fn-stream but a little more efficient.

Features:

  • macroless API
  • one dependency (besides futures-core which I don't count since it provides the Stream definition)
  • no_std-compatible, zero allocations

⚠ Important

This crate adds a wrapper around the wakers that contains data and pointers needed to yield items. Crates like embassy use a similar approach and will therefore clash with us.

If you run into this issue (which will manifest as a runtime panic), you can use the unwrap_waker function. This function will wrap a future and remove the waker wrapper.

While you can't use the yielder inside the unwrapped future, stuff like embassy should work again.

Example

use futures_lite::stream;
use std::pin::pin;

let stream = pin!(asynk_strim::stream_fn(|mut yielder| async move {
    yielder.yield_item("hello world!").await;
    yielder.yield_item("pretty neato, ain't it?").await;
}));

let mut stream = stream::block_on(stream);
assert_eq!(stream.next(), Some("hello world!"));
assert_eq!(stream.next(), Some("pretty neato, ain't it?"));
assert_eq!(stream.next(), None);

Comparisons

async-stream

In comparison to async-stream we offer the following advantages:

  • no macros
  • slightly faster performance
  • no_std support

async-fn-stream

In comparison to async-stream we offer the following advantages:

  • no allocations
  • slightly faster performance
  • no_std support

Acknowledgements

This crate combines approaches from the following crates:

License

Licensed under tither the MIT or Apache 2.0 license (at your choosing)

Commit count: 8

cargo fmt