Crate safina_select[][src]

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.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

  • DONE - Implement sleep_ab
  • DONE - Add tests
  • DONE - Add docs
  • DONE - Add sleep_abc, sleep_abcd, and sleep_abcde
  • DONE - Publish on crates.io

Release Process

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

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.