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;