pub async fn timeout<F>(
    duration: Duration,
    future: F
) -> Result<F::Output, TimeoutError>where
    F: Future + Send,