#[retry]Expand description
Decorate a function with a given retry configuration.
Takes two arguments
ExponentialBackoffConfig: type defined in parent crate that configures how to back off- retry-if: a predicate that takes the same type as the output of the decorated function
§Example: Retrying a Result-producing Function on Err(…)
The below example sets up a basic retry configuration that will retry up to five times, waiting at first 1 second, then 2 seconds, 4 seconds, etc.
There is no configured maximum time to retry across all attempts (t_wait_max), nor is there any maximum waiting time on each backoff (backoff_max).
const BACKOFF_CONFIG: ExponentialBackoffConfig = ExponentialBackoffConfig {
max_retries: 5,
t_wait: Duration::from_secs(1),
backoff: 2.0,
t_wait_max: None,
backoff_max: None,
};
// this takes an address of the same type as the output of the decorated function
// it returns a boolean specifying if the function should be retried based on the result
fn retry_if(result: &Result<i64, TryFromIntError>) -> bool {
result.is_err()
}
#[retry(BACKOFF_CONFIG, retry_if)]
async fn fallible_call() -> Result<i64, TryFromIntError> {
// this will always produce a TryFromIntError, triggering a retry
i64::try_from(i128::MAX)
}