use tower::Layer;
use crate::middleware::service::RateLimitService;
#[derive(Clone)]
pub struct RateLimitLayer<Store, Extractor> {
store: Store,
extractor: Extractor,
}
impl<Store, Extractor> RateLimitLayer<Store, Extractor> {
pub fn new(store: Store, extractor: Extractor) -> Self {
Self { store, extractor }
}
}
impl<S, Store, Extractor> Layer<S> for RateLimitLayer<Store, Extractor>
where
Store: Clone,
Extractor: Clone,
{
type Service = RateLimitService<S, Store, Extractor>;
fn layer(&self, inner: S) -> Self::Service {
RateLimitService {
inner,
store: self.store.clone(),
extractor: self.extractor.clone(),
}
}
}