use std::sync::{Mutex, MutexGuard, OnceLock};
use logtest::Logger;
use rstest::fixture;
pub struct LoggerHandle {
guard: MutexGuard<'static, Logger>,
}
impl LoggerHandle {
pub fn new() -> Self {
static LOGGER: OnceLock<Mutex<Logger>> = OnceLock::new();
let logger = LOGGER.get_or_init(|| Mutex::new(Logger::start()));
let guard = logger.lock().expect("logger poisoned");
Self { guard }
}
pub fn clear(&mut self) { while self.pop().is_some() {} }
}
impl std::ops::Deref for LoggerHandle {
type Target = Logger;
fn deref(&self) -> &Self::Target { &self.guard }
}
impl std::ops::DerefMut for LoggerHandle {
fn deref_mut(&mut self) -> &mut Self::Target { &mut self.guard }
}
#[fixture]
pub fn logger() -> LoggerHandle {
LoggerHandle::new()
}