shoes 0.3.2

A multi-protocol proxy server.
Documentation
use std::sync::OnceLock;

static NUM_THREADS: OnceLock<usize> = OnceLock::new();

pub fn set_num_threads(num_threads: usize) {
    let _ = NUM_THREADS.set(num_threads.max(1));
}

pub fn get_num_threads() -> usize {
    NUM_THREADS.get().copied().unwrap_or(1)
}

#[cfg(test)]
mod tests {
    #[test]
    fn library_callers_have_a_nonzero_thread_default() {
        if std::env::var_os("SHOES_THREAD_DEFAULT_TEST_CHILD").is_some() {
            assert!(super::NUM_THREADS.get().is_none());
            assert_eq!(super::get_num_threads(), 1);
            super::set_num_threads(2);
            assert_eq!(super::get_num_threads(), 2);
        } else {
            let status = std::process::Command::new(std::env::current_exe().unwrap())
                .args([
                    "--exact",
                    "thread_util::tests::library_callers_have_a_nonzero_thread_default",
                    "--quiet",
                ])
                .env("SHOES_THREAD_DEFAULT_TEST_CHILD", "1")
                .status()
                .unwrap();
            assert!(status.success());
        }
    }
}