Crates.io | woven |
lib.rs | woven |
version | 0.1.0 |
source | src |
created_at | 2024-09-26 04:24:09.292381 |
updated_at | 2024-09-26 04:24:09.292381 |
description | A simple set of async combinators, usable in a no_std environment. |
homepage | https://github.com/NZRosto/woven |
repository | https://github.com/NZRosto/woven |
max_upload_size | |
id | 1386965 |
size | 23,538 |
A simple set of async combinators, usable in a no_std
, no_alloc
environment.
Because of it's simplicity, Woven doesn't implement granular wakers, so an executer has no way of knowing which task woke it. This usually leads to all the combined futures being polled again, regardless of which one actually woke the executor. It's up to you whether this is acceptable or not.
See cassette
for the executor used in the examples.
use woven::Join;
cassette::block_on(async {
let future1 = async { 1 };
let future2 = async { 2 };
let future3 = async { 3 };
let result = (future1, future2, future3).join().await;
assert_eq!(result, (1, 2, 3));
});
use woven::{Race, Either3};
cassette::block_on(async {
let future1 = async { 1 };
let future2 = async { 2 };
let future3 = async { 3 };
let result = (future1, future2, future3).race().await;
assert_eq!(result, Either3::First(1)); // If multiple futures complete at the same time, the first one is returned.
});
use woven::RaceSame;
cassette::block_on(async {
let future1 = async { 1 };
let future2 = async { 2 };
let future3 = async { 3 };
let result = (future1, future2, future3).race_same().await;
assert_eq!(result, 1); // If multiple futures complete at the same time, the first one is returned.
});