reqwest-builder-retry 0.6.0

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

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

use crate::{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<SuccessResponse, ErrorResponse, MakerBuilder, CheckDone, FutCheckDone>(
    make_builder: MakerBuilder,
    check_done: CheckDone,
    try_count: u8,
    retry_duration: Duration,
) -> Result<SuccessResponse, Error<ErrorResponse>>
where
    MakerBuilder: Fn(u8) -> RequestBuilder,
    CheckDone: Fn(Result<Response, reqwest::Error>) -> FutCheckDone,
    FutCheckDone: Future<Output = Result<SuccessResponse, (RetryType, ErrorResponse)>>,
{
    crate::execute(
        make_builder,
        check_done,
        try_count,
        retry_duration,
        default_jitter,
        default_sleeper,
    )
    .await
}