[][src]Crate async_fuse

Helpers for fusing asynchronous computations.

This is especially useful in combination with optional branches using tokio::select, where the future being polled isn't necessarily set.

A similar structure is provided by futures-rs called Fuse. This however lacks some of the flexibility needed to interact with tokio's streaming types like [Interval] since these no longer implement [Stream].

Examples

This is available as the ticker example:

cargo run --example ticker
use std::time::Duration;
use tokio::time;

let mut interval = async_fuse::poll_fn(
    time::interval(Duration::from_secs(1)),
    time::Interval::poll_tick,
);

let sleep = async_fuse::once(time::sleep(Duration::from_secs(5)));
tokio::pin!(sleep);

for _ in 0..20usize {
    tokio::select! {
        when = &mut interval => {
            println!("tick: {:?}", when);
        }
        _ = &mut sleep => {
            interval.set(time::interval(Duration::from_millis(200)));
        }
    }
}

Structs

Once

Fusing adapter that is capable of polling an interior value that is being fused using a custom polling function.

PollFn

Fusing adapter that is capable of polling an interior value that is being fused using a custom polling function.

Functions

once

Construct a fusing adapter that is capable of polling an interior future.

poll_fn

Construct a fusing adapter that is capable of polling an interior value that is being polled using a custom function.