extern crate trpl; // required for mdbook test use std::time::Duration; // ANCHOR: implementation use trpl::Either; // --snip-- // ANCHOR: implementation fn main() { trpl::run(async { let slow = async { trpl::sleep(Duration::from_secs(5)).await; "Finally finished" }; match timeout(slow, Duration::from_secs(2)).await { Ok(message) => println!("Succeeded with '{message}'"), Err(duration) => { println!("Failed after {} seconds", duration.as_secs()) } } }); } async fn timeout( future_to_try: F, max_time: Duration, ) -> Result { // ANCHOR: implementation match trpl::race(future_to_try, trpl::sleep(max_time)).await { Either::Left(output) => Ok(output), Either::Right(_) => Err(max_time), } // ANCHOR_END: implementation }