headless_lms_server/domain/
rate_limit_middleware_builder.rs1use std::{future::Ready, time::Duration};
2
3use actix_extensible_rate_limit::{
4 RateLimiter,
5 backend::{SimpleInput, SimpleInputFunctionBuilder, SimpleOutput, memory::InMemoryBackend},
6};
7use actix_web::dev::ServiceRequest;
8
9pub fn build_rate_limiting_middleware(
11 interval: Duration,
12 max_requests: u64,
13) -> RateLimiter<
14 InMemoryBackend,
15 SimpleOutput,
16 impl Fn(&ServiceRequest) -> Ready<Result<SimpleInput, actix_web::Error>>,
17> {
18 let rate_limiting_backend = InMemoryBackend::builder().build();
19
20 let input = SimpleInputFunctionBuilder::new(interval, max_requests)
21 .real_ip_key()
23 .build();
24
25 RateLimiter::builder(rate_limiting_backend, input).build()
26}