Function timeout

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