use super::{Transport, TransportStreamOptions};
use logform::BoxedLogFormat as LogFormat;
pub struct ConsoleTransportOptions {
pub base: Option<TransportStreamOptions>,
}
pub struct ConsoleTransport {
options: ConsoleTransportOptions,
}
impl ConsoleTransport {
pub fn new(options: Option<ConsoleTransportOptions>) -> Self {
let options = options.unwrap_or_else(|| ConsoleTransportOptions { base: None });
ConsoleTransport { options }
}
pub fn builder() -> ConsoleTransportBuilder {
ConsoleTransportBuilder::new()
}
}
impl Transport for ConsoleTransport {
fn log(&self, message: &str, _level: &str) {
println!("{}", message);
}
fn get_level(&self) -> Option<&String> {
self.options
.base
.as_ref()
.and_then(|base| base.level.as_ref())
}
fn get_format(&self) -> Option<&LogFormat> {
self.options
.base
.as_ref()
.and_then(|base| base.format.as_ref())
}
}
pub struct ConsoleTransportBuilder {
base: Option<TransportStreamOptions>,
}
impl ConsoleTransportBuilder {
pub fn new() -> Self {
Self {
base: None,
}
}
pub fn level<T: Into<String>>(mut self, level: T) -> Self {
let level = level.into();
self.base
.get_or_insert_with(|| TransportStreamOptions {
level: None,
format: None,
})
.level = Some(level);
self
}
pub fn format(mut self, format: LogFormat) -> Self {
self.base
.get_or_insert_with(|| TransportStreamOptions {
level: None,
format: None,
})
.format = Some(format);
self
}
pub fn build(self) -> ConsoleTransport {
let options = ConsoleTransportOptions {
base: self.base,
};
ConsoleTransport::new(Some(options))
}
}