use super::Retry; | |
use tower_layer::Layer; | |
/// Retry requests based on a policy | |
#[derive(Debug)] | |
pub struct RetryLayer<P> { | |
policy: P, | |
} | |
impl<P> RetryLayer<P> { | |
/// Create a new [`RetryLayer`] from a retry policy | |
pub fn new(policy: P) -> Self { | |
RetryLayer { policy } | |
} | |
} | |
impl<P, S> Layer<S> for RetryLayer<P> | |
where | |
P: Clone, | |
{ | |
type Service = Retry<P, S>; | |
fn layer(&self, service: S) -> Self::Service { | |
let policy = self.policy.clone(); | |
Retry::new(policy, service) | |
} | |
} |