reqwest-builder-retry 0.3.0

LINE API library.
Documentation
use std::time::Duration;

use rand::{Rng, SeedableRng, rngs::StdRng};
use reqwest::{RequestBuilder, Response};

use crate::{RetryResult, RetryType, error::Error};

async fn default_sleeper(duration: Duration) {
    tokio::time::sleep(duration).await;
}

fn default_jitter() -> Duration {
    let mut rng = StdRng::from_os_rng();
    Duration::from_millis(rng.random_range(0..100))
}

pub async fn execute<T, F, G, Fut>(
    make_builder: F,
    check_done: G,
    try_count: u8,
    retry_duration: Duration,
) -> Result<RetryResult<T>, Error>
where
    F: Fn(u8) -> RequestBuilder,
    G: Fn(Result<Response, reqwest::Error>) -> Fut,
    Fut: Future<Output = Result<RetryResult<T>, RetryType>> + Send + 'static,
{
    crate::execute(
        make_builder,
        check_done,
        try_count,
        retry_duration,
        default_jitter,
        default_sleeper,
    )
    .await
}