use std::sync::Mutex;
static BUFFER: Mutex<Option<Vec<String>>> = Mutex::new(None);
pub fn activate() {
*BUFFER.lock().unwrap() = Some(Vec::new());
}
pub fn drain() -> Vec<String> {
BUFFER.lock().unwrap().take().unwrap_or_default()
}
pub fn warn(msg: String) {
let mut guard = BUFFER.lock().unwrap();
if let Some(buf) = guard.as_mut() {
buf.push(msg);
} else {
drop(guard);
eprintln!("{}", msg);
}
}
#[macro_export]
macro_rules! buffered_eprintln {
($($arg:tt)*) => {
$crate::stderr_buffer::warn(format!($($arg)*))
};
}