[−][src]Crate safina_select
This is a Rust library for awaiting multiple futures and getting the value of the first one that completes.
You can use it with safina
or any async runtime.
Features
forbid(unsafe_code)
- Depends only on
std
- Good test coverage (92%)
Limitations
- Can await 2-5 futures. Nest them if you need more.
Examples
use safina_async_test::async_test; use safina_select::{select_ab, OptionAB}; let conn = match select_ab(make_new(addr.clone()), get_from_pool(addr.clone())).await { OptionAB::A(result) => result?, OptionAB::B(result) => result?, }; // When both futures return the same type, you can use `take`: let conn = select_ab(make_new(addr.clone()), get_from_pool(addr.clone())).await.take()?;
use safina_async_test::async_test; use safina_select::{select_ab, OptionAB}; safina_timer::start_timer_thread(); let data = match select_ab(read_data(), safina_timer::sleep_until(deadline)).await { OptionAB::A(result) => Ok(result?), OptionAB::B(()) => Err("timeout"), };
Documentation
https://docs.rs/safina-select
TO DO - Alternatives
- tokio::select
- very popular
- Fast
- internally incredibly complicated
- full of
unsafe
- futures::select
- very popular
- proc macro, very complicated
- contains a little
unsafe
code
Release Process
- Edit
Cargo.toml
and bump version number. - Run
./release.sh
Changelog
- v0.1.0 - First published version
TO DO
- DONE - Implement
sleep_ab
- DONE - Add tests
- DONE - Add docs
- DONE - Add
sleep_abc
,sleep_abcd
, andsleep_abcde
- DONE - Publish on crates.io
Structs
SelectFuture | A future that polls two futures and returns the value from the one that completes first. |
Enums
OptionAB | |
OptionABC | |
OptionABCD | |
OptionABCDE |
Functions
select_ab | Awaits both futures and returns the value from the one that completes first. |
select_abc | Awaits the futures and returns the value from the one that completes first. |
select_abcd | Awaits the futures and returns the value from the one that completes first. |
select_abcde | Awaits the futures and returns the value from the one that completes first. |