Trait Policy
trait Policy<Req, Res, E>
A "retry policy" to classify if a request should be retried.
Example
use Policy;
use future;
type Req = String;
type Res = String;
;
Associated Types
type Future: TraitBound { trait_: Path { path: "Future", id: Id(175), args: Some(AngleBracketed { args: [], constraints: [AssocItemConstraint { name: "Output", args: None, binding: Equality(Type(Tuple([]))) }] }) }, generic_params: [], modifier: None }The
Futuretype returned byPolicy::retry.
Required Methods
fn retry(self: &mut Self, req: &mut Req, result: &mut Result<Res, E>) -> Option<<Self as >::Future>Check the policy if a certain request should be retried.
This method is passed a reference to the original request, and either the
Service::ResponseorService::Errorfrom the inner service.If the request should not be retried, return
None.If the request should be retried, return
Somefuture that will delay the next retry of the request. This can be used to sleep for a certain duration, to wait for some external condition to be met before retrying, or resolve right away, if the request should be retried immediately.Mutating Requests
The policy MAY chose to mutate the
req: if the request is mutated, the mutated request will be sent to the inner service in the next retry. This can be helpful for use cases like tracking the retry count in a header.Mutating Results
The policy MAY chose to mutate the result. This enables the retry policy to convert a failure into a success and vice versa. For example, if the policy is used to poll while waiting for a state change, the policy can switch the result to emit a specific error when retries are exhausted.
The policy can also record metadata on the request to include information about the number of retries required or to record that a failure failed after exhausting all retries.
fn clone_request(self: &mut Self, req: &Req) -> Option<Req>Tries to clone a request before being passed to the inner service.
If the request cannot be cloned, return
None. Moreover, the retry function will not be called if theNoneis returned.