safina-select

Crates.iosafina-select
lib.rssafina-select
version0.1.5
sourcesrc
created_at2020-12-12 04:37:53.983134
updated_at2024-10-27 23:44:40.234184
descriptionSafe async select function, for awaiting multiple futures - ARCHIVED: Code moved to `safina` crate.
homepage
repositoryhttps://gitlab.com/leonhard-llc/safina-rs
max_upload_size
id322074
size59,805
Michael Leonhard (mleonhard)

documentation

README

ARCHIVED ARCHIVED ARCHIVED

This crate is archived and will not be updated.

The code is now at safina::select in the safina crate.


safina-select

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
Commit count: 379

cargo fmt