Struct google_cloud_bigquery::query::BlockingRetry
source · pub struct BlockingRetry<B, T, E, F, RF = fn(_: &E) -> bool, NF = fn(_: &E, _: Duration)>where
B: Backoff,
F: FnMut() -> Result<T, E>,{ /* private fields */ }Expand description
Retry struct generated by [Retryable].
Implementations§
source§impl<B, T, E, F, RF, NF> BlockingRetry<B, T, E, F, RF, NF>where
B: Backoff,
F: FnMut() -> Result<T, E>,
RF: FnMut(&E) -> bool,
NF: FnMut(&E, Duration),
impl<B, T, E, F, RF, NF> BlockingRetry<B, T, E, F, RF, NF>where B: Backoff, F: FnMut() -> Result<T, E>, RF: FnMut(&E) -> bool, NF: FnMut(&E, Duration),
sourcepub fn when<RN>(self, retryable: RN) -> BlockingRetry<B, T, E, F, RN, NF>where
RN: FnMut(&E) -> bool,
pub fn when<RN>(self, retryable: RN) -> BlockingRetry<B, T, E, F, RN, NF>where RN: FnMut(&E) -> bool,
Set the conditions for retrying.
If not specified, we treat all errors as retryable.
Examples
use anyhow::Result;
use backon::BlockingRetryable;
use backon::ExponentialBuilder;
fn fetch() -> Result<String> {
Ok("hello, world!".to_string())
}
fn main() -> Result<()> {
let retry = fetch
.retry(&ExponentialBuilder::default())
.when(|e| e.to_string() == "EOF");
let content = retry.call()?;
println!("fetch succeeded: {}", content);
Ok(())
}sourcepub fn notify<NN>(self, notify: NN) -> BlockingRetry<B, T, E, F, RF, NN>where
NN: FnMut(&E, Duration),
pub fn notify<NN>(self, notify: NN) -> BlockingRetry<B, T, E, F, RF, NN>where NN: FnMut(&E, Duration),
Set to notify for everything retrying.
If not specified, this is a no-op.
Examples
use std::time::Duration;
use anyhow::Result;
use backon::BlockingRetryable;
use backon::ExponentialBuilder;
fn fetch() -> Result<String> {
Ok("hello, world!".to_string())
}
#[tokio::main]
async fn main() -> Result<()> {
let retry = fetch.retry(&ExponentialBuilder::default()).notify(
|err: &anyhow::Error, dur: Duration| {
println!("retrying error {:?} with sleeping {:?}", err, dur);
},
);
let content = retry.call()?;
println!("fetch succeeded: {}", content);
Ok(())
}sourcepub fn call(self) -> Result<T, E>
pub fn call(self) -> Result<T, E>
Call the retried function.
TODO: implment std::ops::FnOnce after it stable.
Auto Trait Implementations§
impl<B, T, E, F, RF, NF> RefUnwindSafe for BlockingRetry<B, T, E, F, RF, NF>where B: RefUnwindSafe, F: RefUnwindSafe, NF: RefUnwindSafe, RF: RefUnwindSafe,
impl<B, T, E, F, RF, NF> Send for BlockingRetry<B, T, E, F, RF, NF>where F: Send, NF: Send, RF: Send,
impl<B, T, E, F, RF, NF> Sync for BlockingRetry<B, T, E, F, RF, NF>where F: Sync, NF: Sync, RF: Sync,
impl<B, T, E, F, RF, NF> Unpin for BlockingRetry<B, T, E, F, RF, NF>where F: Unpin, NF: Unpin, RF: Unpin,
impl<B, T, E, F, RF, NF> UnwindSafe for BlockingRetry<B, T, E, F, RF, NF>where B: UnwindSafe, F: UnwindSafe, NF: UnwindSafe, RF: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request