use core::fmt;
use crate::record::Record;
pub trait Format: Send + Sync {
fn write_record<W: fmt::Write + ?Sized>(
&self,
record: &Record<'_>,
writer: &mut W,
) -> fmt::Result;
}
impl<T: Format + ?Sized> Format for &T {
fn write_record<W: fmt::Write + ?Sized>(
&self,
record: &Record<'_>,
writer: &mut W,
) -> fmt::Result {
(**self).write_record(record, writer)
}
}
#[cfg(feature = "std")]
impl<T: Format + ?Sized> Format for std::sync::Arc<T> {
fn write_record<W: fmt::Write + ?Sized>(
&self,
record: &Record<'_>,
writer: &mut W,
) -> fmt::Result {
(**self).write_record(record, writer)
}
}
#[cfg(feature = "std")]
impl<T: Format + ?Sized> Format for Box<T> {
fn write_record<W: fmt::Write + ?Sized>(
&self,
record: &Record<'_>,
writer: &mut W,
) -> fmt::Result {
(**self).write_record(record, writer)
}
}
#[cfg(any(feature = "json", feature = "human"))]
pub(crate) mod rfc3339;
#[cfg(feature = "json")]
mod json;
#[cfg(feature = "json")]
pub use self::json::JsonFormat;
#[cfg(feature = "logfmt")]
mod logfmt;
#[cfg(feature = "logfmt")]
pub use self::logfmt::LogfmtFormat;
#[cfg(feature = "human")]
mod human;
#[cfg(feature = "human")]
pub use self::human::HumanFormat;