use crate::Level;
use conjure_error::Error;
use erased_serde::Serialize;
#[derive(Clone)]
pub struct Metadata<'a> {
level: Level,
target: &'a str,
}
impl<'a> Metadata<'a> {
#[inline]
pub fn builder() -> MetadataBuilder<'a> {
MetadataBuilder::new()
}
#[inline]
pub fn level(&self) -> Level {
self.level
}
#[inline]
pub fn target(&self) -> &'a str {
self.target
}
}
pub struct MetadataBuilder<'a>(Metadata<'a>);
impl<'a> Default for MetadataBuilder<'a> {
fn default() -> MetadataBuilder<'a> {
MetadataBuilder::new()
}
}
impl<'a> MetadataBuilder<'a> {
#[inline]
pub fn new() -> MetadataBuilder<'a> {
MetadataBuilder(Metadata {
level: Level::Info,
target: "",
})
}
#[inline]
pub fn level(&mut self, level: Level) -> &mut MetadataBuilder<'a> {
self.0.level = level;
self
}
#[inline]
pub fn target(&mut self, target: &'a str) -> &mut MetadataBuilder<'a> {
self.0.target = target;
self
}
#[inline]
pub fn build(&self) -> Metadata<'a> {
self.0.clone()
}
}
#[derive(Clone)]
pub struct Record<'a> {
metadata: Metadata<'a>,
file: Option<&'a str>,
line: Option<u32>,
message: &'static str,
safe_params: &'a [(&'static str, &'a dyn Serialize)],
unsafe_params: &'a [(&'static str, &'a dyn Serialize)],
error: Option<&'a Error>,
}
impl<'a> Record<'a> {
#[inline]
pub fn builder() -> RecordBuilder<'a> {
RecordBuilder::new()
}
#[inline]
pub fn metadata(&self) -> &Metadata<'a> {
&self.metadata
}
#[inline]
pub fn level(&self) -> Level {
self.metadata.level
}
#[inline]
pub fn target(&self) -> &'a str {
self.metadata.target
}
#[inline]
pub fn file(&self) -> Option<&'a str> {
self.file
}
#[inline]
pub fn line(&self) -> Option<u32> {
self.line
}
#[inline]
pub fn message(&self) -> &'static str {
self.message
}
#[inline]
pub fn safe_params(&self) -> &'a [(&'static str, &dyn Serialize)] {
self.safe_params
}
#[inline]
pub fn unsafe_params(&self) -> &'a [(&'static str, &dyn Serialize)] {
self.unsafe_params
}
#[inline]
pub fn error(&self) -> Option<&'a Error> {
self.error
}
}
pub struct RecordBuilder<'a>(Record<'a>);
impl<'a> Default for RecordBuilder<'a> {
fn default() -> RecordBuilder<'a> {
RecordBuilder::new()
}
}
impl<'a> RecordBuilder<'a> {
#[inline]
pub fn new() -> RecordBuilder<'a> {
RecordBuilder(Record {
metadata: Metadata::builder().build(),
file: None,
line: None,
message: "",
safe_params: &[],
unsafe_params: &[],
error: None,
})
}
#[inline]
pub fn level(&mut self, level: Level) -> &mut RecordBuilder<'a> {
self.0.metadata.level = level;
self
}
#[inline]
pub fn target(&mut self, target: &'a str) -> &mut RecordBuilder<'a> {
self.0.metadata.target = target;
self
}
#[inline]
pub fn file(&mut self, file: Option<&'a str>) -> &mut RecordBuilder<'a> {
self.0.file = file;
self
}
#[inline]
pub fn line(&mut self, line: Option<u32>) -> &mut RecordBuilder<'a> {
self.0.line = line;
self
}
#[inline]
pub fn message(&mut self, message: &'static str) -> &mut RecordBuilder<'a> {
self.0.message = message;
self
}
#[inline]
pub fn safe_params(
&mut self,
safe_params: &'a [(&'static str, &dyn Serialize)],
) -> &mut RecordBuilder<'a> {
self.0.safe_params = safe_params;
self
}
#[inline]
pub fn unsafe_params(
&mut self,
unsafe_params: &'a [(&'static str, &dyn Serialize)],
) -> &mut RecordBuilder<'a> {
self.0.unsafe_params = unsafe_params;
self
}
#[inline]
pub fn error(&mut self, error: Option<&'a Error>) -> &mut RecordBuilder<'a> {
self.0.error = error;
self
}
#[inline]
pub fn build(&self) -> Record<'a> {
self.0.clone()
}
}