dfx-core 0.3.0

dfx core library
Documentation
use backoff::SystemClock;
use backoff::exponential::ExponentialBackoff;
use backoff::future::retry;
use reqwest::Response;
use url::Url;

pub async fn get_with_retries(
    url: Url,
    retry_policy: ExponentialBackoff<SystemClock>,
) -> Result<Response, reqwest::Error> {
    let operation = || async {
        let response = reqwest::get(url.clone())
            .await
            .and_then(|resp| resp.error_for_status());
        match response {
            Ok(doc) => Ok(doc),
            Err(e) if crate::error::reqwest::is_retryable(&e) => Err(backoff::Error::transient(e)),
            Err(e) => Err(backoff::Error::permanent(e)),
        }
    };
    retry(retry_policy, operation).await
}