fraiseql_core/config/
rate_limit.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7#[serde(default)]
8pub struct RateLimitConfig {
9 pub enabled: bool,
11
12 pub requests_per_window: u32,
14
15 pub window_secs: u64,
17
18 pub key_by: RateLimitKey,
20
21 pub exclude_paths: Vec<String>,
23
24 pub path_limits: Vec<PathRateLimit>,
26}
27
28impl Default for RateLimitConfig {
29 fn default() -> Self {
30 Self {
31 enabled: false,
32 requests_per_window: 100,
33 window_secs: 60,
34 key_by: RateLimitKey::Ip,
35 exclude_paths: vec!["/health".to_string()],
36 path_limits: vec![],
37 }
38 }
39}
40
41#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
43#[serde(rename_all = "snake_case")]
44#[non_exhaustive]
45pub enum RateLimitKey {
46 #[default]
48 Ip,
49 User,
51 ApiKey,
53}
54
55#[derive(Debug, Clone, Serialize, Deserialize)]
57pub struct PathRateLimit {
58 pub path: String,
60 pub requests_per_window: u32,
62}