use smol::future::FutureExt; use std::{future::Future, time::Duration}; pub fn post_inc(value: &mut usize) -> usize { let prev = *value; *value += 1; prev } pub async fn timeout(timeout: Duration, f: F) -> Result where F: Future, { let timer = async { smol::Timer::after(timeout).await; Err(()) }; let future = async move { Ok(f.await) }; timer.race(future).await }