1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
use crate::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) } }