use std::sync::{LazyLock, Mutex};
#[derive(Debug, Default, Clone, Copy)]
struct RuntimeSettings {
timeout_secs: Option<u64>,
timing: bool,
}
static SETTINGS: LazyLock<Mutex<RuntimeSettings>> =
LazyLock::new(|| Mutex::new(RuntimeSettings::default()));
pub fn apply_config_defaults(timeout_secs: Option<u64>, timing: Option<bool>) {
if let Ok(mut settings) = SETTINGS.lock() {
if settings.timeout_secs.is_none() {
settings.timeout_secs = timeout_secs;
}
if let Some(timing) = timing {
settings.timing |= timing;
}
}
}
pub fn set_timeout(timeout_secs: Option<u64>) {
if let Ok(mut settings) = SETTINGS.lock() {
settings.timeout_secs = timeout_secs;
}
}
pub fn enable_timing() {
if let Ok(mut settings) = SETTINGS.lock() {
settings.timing = true;
}
}
pub fn timeout_secs() -> u64 {
if let Ok(value) = std::env::var("RUN_TIMEOUT_SECS")
&& let Ok(parsed) = value.parse::<u64>()
{
return parsed;
}
SETTINGS
.lock()
.ok()
.and_then(|settings| settings.timeout_secs)
.unwrap_or(0)
}
pub fn timing_enabled() -> bool {
if std::env::var("RUN_TIMING").is_ok_and(|v| v == "1" || v == "true") {
return true;
}
SETTINGS.lock().is_ok_and(|settings| settings.timing)
}