Function warp_ratelimit::ratelimit_filter [−][src]
pub async fn ratelimit_filter(
prev_visitors: Arc<Mutex<Vec<DistinctVisitor>>>,
num_allowed_requests: u64,
reset_duration: Duration
) -> BoxedFilter<(impl Reply,)>
Create a new ratelimiting filter with the given parameters.
Example
use std::net::{IpAddr, Ipv4Addr, SocketAddr}; use std::sync::{Arc, Mutex}; use std::time::Duration; #[tokio::main] async fn main() { // Memory for filter let mem = Arc::new(Mutex::new(Vec::new())); // Ratelimiting filter that lets in 10 requests from each user every 6 minutes let filter = warp_ratelimit::ratelimit_filter(Arc::clone(&mem), 10, Duration::new(360, 0)).await; // Keep requesting filter until it stops letting requests through let mut num_calls = 1; let mut response = warp::test::request() .remote_addr(SocketAddr::new(IpAddr::V4(Ipv4Addr::new(1, 1, 1, 1)), 8080)) .reply(&filter) .await; while format!("{:?}", response).contains("200") { response = warp::test::request() .remote_addr(SocketAddr::new(IpAddr::V4(Ipv4Addr::new(1, 1, 1, 1)), 8080)) .reply(&filter) .await; num_calls += 1; } // Amount of requests let through should be 10 assert_eq!(num_calls, 10); }