retrying 0.1.0

General-purpose retrying library for Rust with macros and functions
Documentation
use retrying::retry;
use std::num::ParseIntError;

#[tokio::main]
async fn main() {
    let mut handles = vec![];

    handles.push(tokio::spawn(async {
        let _ = try_retry_attempts("try_retry_attempts").await;
    }));

    handles.push(tokio::spawn(async {
        let _ = try_retry_duration("try_retry_duration").await;
    }));

    handles.push(tokio::spawn(async {
        let _ = try_retry_attempts_fixed("try_retry_attempts_fixed").await;
    }));
    handles.push(tokio::spawn(async {
        let _ = try_retry_attempts_random("try_retry_attempts_random").await;
    }));
    handles.push(tokio::spawn(async {
        let _ = try_retry_attempts_exponential("try_retry_attempts_exponential").await;
    }));

    std::env::set_var("MY_METHOD__RETRYING__STOP__ATTEMPTS", "3");
    std::env::set_var("MY_METHOD__RETRYING__WAIT__FIXED", "2");

    handles.push(tokio::spawn(async {
        let _ = try_retry_attempts_fixed_env("try_retry_attempts_fixed_env").await;
    }));

    for future in handles {
        let _result = future.await;
    }
}

#[retry(stop=attempts(2))]
async fn try_retry_attempts(in_param: &str) -> Result<i32, ParseIntError> {
    println!("{}", in_param);
    in_param.parse::<i32>()
}

#[retry(stop=duration(1))]
async fn try_retry_duration(in_param: &str) -> Result<i32, ParseIntError> {
    println!("{}", in_param);
    in_param.parse::<i32>()
}

#[retry(stop=(attempts(4)|duration(2)),wait=fixed(1))]
async fn try_retry_attempts_fixed(in_param: &str) -> Result<i32, ParseIntError> {
    println!("{}", in_param);
    in_param.parse::<i32>()
}

#[retry(stop=attempts(4),wait=random(min=1,max=2))]
async fn try_retry_attempts_random(in_param: &str) -> Result<i32, ParseIntError> {
    println!("{}", in_param);
    in_param.parse::<i32>()
}

#[retry(stop=attempts(4),wait=exponential(min=1,max=10))]
async fn try_retry_attempts_exponential(in_param: &str) -> Result<i32, ParseIntError> {
    println!("{}", in_param);
    in_param.parse::<i32>()
}

#[retry(stop=attempts(1000),wait=fixed(1000),envs_prefix="MY_METHOD")]
async fn try_retry_attempts_fixed_env(in_param: &str) -> Result<i32, ParseIntError> {
    println!("{}", in_param);
    in_param.parse::<i32>()
}