actix_extensible_rate_limit/lib.rs
1//! Rate limiting middleware for actix-web
2//!
3//! # Getting Started:
4//! ```no_run
5//! # use actix_extensible_rate_limit::backend::{memory::InMemoryBackend, SimpleInputFunctionBuilder};
6//! # use actix_extensible_rate_limit::RateLimiter;
7//! # use actix_web::{App, HttpServer};
8//! # use std::time::Duration;
9//! #[actix_web::main]
10//! async fn main() -> std::io::Result<()> {
11//! // A backend is responsible for storing rate limit data, and choosing whether to allow/deny requests
12//! let backend = InMemoryBackend::builder().build();
13//! HttpServer::new(move || {
14//! // Assign a limit of 5 requests per minute per client ip address
15//! let input = SimpleInputFunctionBuilder::new(Duration::from_secs(60), 5)
16//! .real_ip_key()
17//! .build();
18//! let middleware = RateLimiter::builder(backend.clone(), input)
19//! .add_headers()
20//! .build();
21//! App::new().wrap(middleware)
22//! })
23//! .bind("127.0.0.1:8080")?
24//! .run()
25//! .await
26//! }
27//! ```
28
29#![cfg_attr(docsrs, feature(doc_cfg))]
30
31pub mod backend;
32mod middleware;
33
34pub use middleware::builder::{HeaderCompatibleOutput, RateLimiterBuilder};
35pub use middleware::RateLimiter;