use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConcurrencyConfig {
#[serde(default = "default_max_concurrent_requests")]
pub max_concurrent_requests: usize,
#[serde(default = "default_requests_per_minute")]
pub requests_per_minute: usize,
#[serde(default = "default_true")]
pub enabled: bool,
#[serde(default = "default_true")]
pub semaphore_enabled: bool,
}
fn default_max_concurrent_requests() -> usize {
10
}
fn default_requests_per_minute() -> usize {
500
}
fn default_true() -> bool {
true
}
impl Default for ConcurrencyConfig {
fn default() -> Self {
Self {
max_concurrent_requests: default_max_concurrent_requests(),
requests_per_minute: default_requests_per_minute(),
enabled: true,
semaphore_enabled: true,
}
}
}
impl ConcurrencyConfig {
pub fn new() -> Self {
Self::default()
}
pub fn with_max_concurrent_requests(mut self, max: usize) -> Self {
self.max_concurrent_requests = max;
self
}
pub fn with_requests_per_minute(mut self, rpm: usize) -> Self {
self.requests_per_minute = rpm;
self
}
pub fn with_enabled(mut self, enabled: bool) -> Self {
self.enabled = enabled;
self
}
pub fn high_throughput() -> Self {
Self {
max_concurrent_requests: 50,
requests_per_minute: 3000,
enabled: true,
semaphore_enabled: true,
}
}
pub fn conservative() -> Self {
Self {
max_concurrent_requests: 5,
requests_per_minute: 100,
enabled: true,
semaphore_enabled: true,
}
}
pub fn unlimited() -> Self {
Self {
max_concurrent_requests: usize::MAX,
requests_per_minute: usize::MAX,
enabled: false,
semaphore_enabled: false,
}
}
}