6 releases
0.3.2 | Jul 14, 2020 |
---|---|
0.3.1 |
|
0.3.0 | Jun 12, 2020 |
0.2.0 | Nov 27, 2019 |
0.1.1 | Aug 15, 2019 |
#21 in #exponential
Used in tokkit
13KB
158 lines
backoff-futures
A retry and backoff mechanism for std::future::Future
.
Adding as a dependency
Manually
[dependencies]
backoff-futures = "0.1"
With cargo-edit
cargo add backoff-futures
Usage
#![feature(async_await)]
fn isahc_error_to_backoff(err: isahc::Error) -> backoff::Error<isahc::Error> {
match err {
isahc::Error::Aborted | isahc::Error::Io(_) | isahc::Error::Timeout =>
backoff::Error::Transient(err),
_ =>
backoff::Error::Permanent(err)
}
}
async fn get_example_contents() -> Result<String, backoff::Error<isahc::Error>> {
use isahc::ResponseExt;
let mut response = isahc::get_async("https://example.org")
.await
.map_err(isahc_error_to_backoff)?;
response
.text_async()
.await
.map_err(|err: std::io::Error| backoff::Error::Transient(isahc::Error::Io(err)))
}
async fn get_example_contents_with_retry() -> Result<String, isahc::Error> {
use backoff_futures::BackoffExt;
let mut backoff = backoff::ExponentialBackoff::default();
get_example_contents.with_backoff(&mut backoff)
.await
.map_err(|err| match err {
backoff::Error::Transient(err) | backoff::Error::Permanent(err) => err
})
}
License
Dependencies
~4.5MB
~77K SLoC