use std::sync::{Mutex, OnceLock};
#[derive(Clone, Copy)]
pub enum Mode {
Ignore,
Kill,
}
pub fn set_mode(mode: Mode) {
static MODE: OnceLock<Mutex<Mode>> = OnceLock::new();
let mutex = MODE.get_or_init(|| {
ctrlc::set_handler(|| {
match *MODE
.get()
.expect("static MODE to be initialized")
.lock()
.unwrap_or_else(|e| e.into_inner())
{
Mode::Ignore => (),
Mode::Kill => std::process::exit(1),
}
})
.expect("Error setting Ctrl-C handler");
Mutex::new(mode)
});
*mutex.lock().unwrap_or_else(|e| e.into_inner()) = mode;
}