use crate::{DeferredNow, FlexiLoggerError, FormatFunction};
use log::Record;
use std::any::Any;
pub trait LogWriter: Send + Sync + AsAny {
fn write(&self, now: &mut DeferredNow, record: &Record) -> std::io::Result<()>;
fn flush(&self) -> std::io::Result<()>;
fn max_log_level(&self) -> log::LevelFilter {
log::LevelFilter::Trace
}
fn format(&mut self, format: FormatFunction) {
_ = format;
}
fn shutdown(&self) {}
fn reopen_output(&self) -> Result<(), FlexiLoggerError> {
Ok(())
}
fn rotate(&self) -> Result<(), FlexiLoggerError> {
Ok(())
}
#[doc(hidden)]
fn validate_logs(&self, _expected: &[(&'static str, &'static str, &'static str)]) {
unimplemented!("only useful for tests");
}
}
pub trait AsAny {
fn as_any_ref(&self) -> &dyn Any;
}
impl<T> AsAny for T
where
T: Any,
{
fn as_any_ref(&self) -> &dyn Any {
self
}
}