use anyhow::{bail, Result};
use std::sync::atomic::{AtomicUsize, Ordering};
static FLAG_LIMIT: AtomicUsize = AtomicUsize::new(0);
pub fn set_flag_limit(jobs: usize) {
FLAG_LIMIT.store(jobs, Ordering::Relaxed);
}
pub fn limit() -> Result<usize> {
let flag = FLAG_LIMIT.load(Ordering::Relaxed);
if flag > 0 {
return Ok(flag);
}
if let Some(raw) = std::env::var_os("MITTS_JOBS") {
let value = raw.to_str().and_then(|value| value.parse::<usize>().ok());
return match value {
Some(value) if value > 0 => Ok(value),
_ => bail!("MITTS_JOBS must be a positive integer"),
};
}
Ok(std::thread::available_parallelism()
.map(|value| value.get())
.unwrap_or(8))
}