murgamu 0.7.4

A NestJS-inspired web framework for Rust
Documentation
use super::RateLimitKey;
use std::time::Duration;

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RateLimitAlgorithm {
	FixedWindow,
	SlidingWindow,
	TokenBucket,
}

#[derive(Debug, Clone)]
pub struct RateLimitConfig {
	pub max_requests: u64,
	pub window: Duration,
	pub key_extractor: RateLimitKey,
	pub algorithm: RateLimitAlgorithm,
	pub message: Option<String>,
	pub include_headers: bool,
	pub skip_paths: Vec<String>,
	pub skip_on_missing_key: bool,
	pub status_code: u16,
}

impl Default for RateLimitConfig {
	fn default() -> Self {
		Self {
			max_requests: 100,
			window: Duration::from_secs(60),
			key_extractor: RateLimitKey::Ip,
			algorithm: RateLimitAlgorithm::FixedWindow,
			message: None,
			include_headers: true,
			skip_paths: Vec::new(),
			skip_on_missing_key: false,
			status_code: 429,
		}
	}
}