pub async fn retry<F, Fut, T>(f: F) -> Result<T, Error> where F: Fn() -> Fut, Fut: Future<Output = Result<T, Error>>,