use std::sync::{Mutex, OnceLock};
use std::time::{Duration, Instant};
use crate::config::get_global_max_rps;
static LAST_REQUEST_TIME: OnceLock<Mutex<Instant>> = OnceLock::new();
fn get_last_request_time() -> &'static Mutex<Instant> {
LAST_REQUEST_TIME.get_or_init(|| Mutex::new(Instant::now()))
}
pub async fn enforce_global_rate_limit() {
let max_rps = get_global_max_rps();
if max_rps == 0 {
return;
}
let min_interval = Duration::from_millis(1000 / max_rps as u64);
let last = get_last_request_time();
let mut last_guard = last.lock().unwrap();
let now = Instant::now();
let elapsed = now - *last_guard;
if elapsed < min_interval {
tokio::time::sleep(min_interval - elapsed).await;
}
*last_guard = Instant::now();
}