use super::*;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RateLimitConfig {
#[serde(default)]
pub enabled: bool,
#[serde(default = "default_rpm")]
pub default_rpm: u32,
#[serde(default = "default_tpm")]
pub default_tpm: u32,
#[serde(default)]
pub strategy: RateLimitStrategy,
}
impl Default for RateLimitConfig {
fn default() -> Self {
Self {
enabled: false,
default_rpm: default_rpm(),
default_tpm: default_tpm(),
strategy: RateLimitStrategy::default(),
}
}
}
#[allow(dead_code)]
impl RateLimitConfig {
pub fn merge(mut self, other: Self) -> Self {
if other.enabled {
self.enabled = other.enabled;
}
if other.default_rpm != default_rpm() {
self.default_rpm = other.default_rpm;
}
if other.default_tpm != default_tpm() {
self.default_tpm = other.default_tpm;
}
self.strategy = other.strategy;
self
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum RateLimitStrategy {
TokenBucket,
FixedWindow,
SlidingWindow,
}
impl Default for RateLimitStrategy {
fn default() -> Self {
Self::TokenBucket
}
}