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
use super::{Rate, RateLimit}; use std::time::Duration; use tower_layer::Layer; /// Enforces a rate limit on the number of requests the underlying /// service can handle over a period of time. #[derive(Debug)] pub struct RateLimitLayer { rate: Rate, } impl RateLimitLayer { /// Create new rate limit layer. pub fn new(num: u64, per: Duration) -> Self { let rate = Rate::new(num, per); RateLimitLayer { rate } } } impl<S> Layer<S> for RateLimitLayer { type Service = RateLimit<S>; fn layer(&self, service: S) -> Self::Service { RateLimit::new(service, self.rate) } }