Expand description

crates.io version license: Apache 2.0 unsafe forbidden pipeline status

This is a Rust library for awaiting multiple futures and getting the value of the first one that completes.

It is part of safina, a safe async runtime.

Features

  • forbid(unsafe_code)
  • Depends only on std
  • Good test coverage (96%)
  • Works with safina-executor or any async executor

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

Changelog

  • V0.1.4 - Update docs.
  • v0.1.3 - Rename OptionAB to OptionAb, etc.
  • v0.1.2 - Satisfy pedantic clippy
  • v0.1.1 - Add badges to readme. Rename safina package to safina-executor.
  • v0.1.0 - First published version

TO DO

Release Process

  1. Edit Cargo.toml and bump version number.
  2. Run ./release.sh

Structs

A future that polls two futures and returns the value from the one that completes first.

Enums

Functions

Awaits both futures and returns the value from the one that completes first.

Awaits the futures and returns the value from the one that completes first.

Awaits the futures and returns the value from the one that completes first.

Awaits the futures and returns the value from the one that completes first.