use super::{Transport, TransportStreamOptions};
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<&String> {
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(mut self, level: String) -> Self {
if let Some(mut base) = self.base.take() {
base.level = Some(level);
self.base = Some(base);
} else {
self.base = Some(TransportStreamOptions {
level: Some(level),
format: None,
});
}
self
}
pub fn format(mut self, format: String) -> Self {
if let Some(mut base) = self.base.take() {
base.format = Some(format);
self.base = Some(base);
} else {
self.base = Some(TransportStreamOptions {
level: None,
format: Some(format),
});
}
self
}
pub fn build(self) -> ConsoleTransport {
let options = ConsoleTransportOptions {
base: self.base,
};
ConsoleTransport::new(Some(options))
}
}