use std::fmt;
use super::*;
#[derive(Debug, Clone)]
pub enum Formatter {
Iso8601(Iso8601Formatter),
Simple(SimpleFormatter),
UnixTimestamp(UnixTimestampFormatter),
Custom(Box<dyn FormatTrait>),
}
impl Formatter {
pub fn format(&self, log_entry: &LogEntry) -> String {
match self {
Formatter::Iso8601(f) => f.format(log_entry),
Formatter::Simple(f) => f.format(log_entry),
Formatter::UnixTimestamp(f) => f.format(log_entry),
Formatter::Custom(f) => f.format(log_entry),
}
}
#[allow(dead_code)]
pub(crate) fn width(&self) -> usize {
15
}
}
impl Default for Formatter {
fn default() -> Self {
FormatType::default().create(None)
}
}
impl fmt::Display for Formatter {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Formatter::Iso8601(formatter) => formatter.fmt(f),
Formatter::Simple(formatter) => formatter.fmt(f),
Formatter::UnixTimestamp(formatter) => formatter.fmt(f),
Formatter::Custom(formatter) => formatter.fmt(f),
}
}
}