async-fuse 1.0.1

Helpers for fusing asynchronous computations.
Documentation
use std::pin::pin;
use std::time::Duration;

use async_fuse::Fuse;
use tokio::time;

#[tokio::main]
async fn main() {
    let mut duration = Duration::from_millis(500);

    let mut sleep = pin!(Fuse::new(time::sleep(duration)));
    let mut update_duration = pin!(Fuse::new(time::sleep(Duration::from_secs(2))));

    for _ in 0..10usize {
        tokio::select! {
            () = &mut sleep => {
                println!("Tick");
                sleep.set(async_fuse::Fuse::new(time::sleep(duration)));
            }
            () = &mut update_duration => {
                println!("Tick faster!");
                duration = Duration::from_millis(250);
            }
        }
    }
}