RetryManager

Struct RetryManager 

Source
pub struct RetryManager<E> { /* private fields */ }
Expand description

Generic retry manager for network operations.

Stateless and thread-safe - each operation maintains its own backoff state.

Implementations§

Source§

impl<E> RetryManager<E>
where E: Error,

Source

pub const fn new(config: RetryConfig) -> Self

Creates a new retry manager with the given configuration.

Source

pub async fn execute_with_retry_inner<F, Fut, T>( &self, operation_name: &str, operation: F, should_retry: impl Fn(&E) -> bool, create_error: impl Fn(String) -> E, cancel: Option<&CancellationToken>, ) -> Result<T, E>
where F: FnMut() -> Fut, Fut: Future<Output = Result<T, E>>,

Executes an operation with retry logic and optional cancellation.

Cancellation is checked at three points: (1) Before each operation attempt. (2) During operation execution (via tokio::select!). (3) During retry delays.

This means cancellation may be delayed by up to one operation timeout if it occurs mid-execution.

§Errors

Returns an error if the operation fails after exhausting all retries, if the operation times out, if creating the backoff state fails, or if canceled.

Source

pub async fn execute_with_retry<F, Fut, T>( &self, operation_name: &str, operation: F, should_retry: impl Fn(&E) -> bool, create_error: impl Fn(String) -> E, ) -> Result<T, E>
where F: FnMut() -> Fut, Fut: Future<Output = Result<T, E>>,

Executes an operation with retry logic.

§Errors

Returns an error if the operation fails after exhausting all retries, if the operation times out, or if creating the backoff state fails.

Source

pub async fn execute_with_retry_with_cancel<F, Fut, T>( &self, operation_name: &str, operation: F, should_retry: impl Fn(&E) -> bool, create_error: impl Fn(String) -> E, cancellation_token: &CancellationToken, ) -> Result<T, E>
where F: FnMut() -> Fut, Fut: Future<Output = Result<T, E>>,

Executes an operation with retry logic and cancellation support.

§Errors

Returns an error if the operation fails after exhausting all retries, if the operation times out, if creating the backoff state fails, or if canceled.

Trait Implementations§

Source§

impl<E: Clone> Clone for RetryManager<E>

Source§

fn clone(&self) -> RetryManager<E>

Returns a duplicate of the value. Read more
1.0.0§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<E: Debug> Debug for RetryManager<E>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<E> Freeze for RetryManager<E>

§

impl<E> RefUnwindSafe for RetryManager<E>
where E: RefUnwindSafe,

§

impl<E> Send for RetryManager<E>
where E: Send,

§

impl<E> Sync for RetryManager<E>
where E: Sync,

§

impl<E> Unpin for RetryManager<E>
where E: Unpin,

§

impl<E> UnwindSafe for RetryManager<E>
where E: UnwindSafe,

Blanket Implementations§

§

impl<T> Any for T
where T: 'static + ?Sized,

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> Borrow<T> for T
where T: ?Sized,

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

impl<T> BorrowMut<T> for T
where T: ?Sized,

§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CloneToUninit for T
where T: Clone,

§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
§

impl<T, U> Into<U> for T
where U: From<T>,

§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> Ungil for T
where T: Send,