pub async fn retry_with_backoff<F, Fut, T, E>( operation: F, max_attempts: usize, initial_delay: Duration, max_delay: Duration, ) -> Result<T, E>where F: FnMut() -> Fut, Fut: Future<Output = Result<T, E>>,
Retry a future with exponential backoff