pub async fn timeout<F: Future<Output = T> + Send + 'static, T: Send + 'static>( duration: Duration, fut: F, ) -> Result<T, Elapsed>