std::thread_local! {
pub(crate) static TASK_STDERR: std::cell::RefCell<Option<Vec<String>>> = const { std::cell::RefCell::new(None) };
}
macro_rules! eprint_t {
($($arg:tt)*) => {{
$crate::cli::task_output::TASK_STDERR.with(|b| {
let mut guard = b.borrow_mut();
if let Some(buf) = guard.as_mut() {
buf.push(format!($($arg)*));
} else {
eprintln!($($arg)*);
}
});
}};
}
pub(crate) use eprint_t;
pub(crate) fn capture_task_stderr() {
TASK_STDERR.with(|b| *b.borrow_mut() = Some(Vec::new()));
}
pub(crate) fn flush_task_stderr() -> Vec<String> {
TASK_STDERR.with(|b| b.borrow_mut().take().unwrap_or_default())
}