use super::define::*;
use super::source::*;
#[derive(Debug, Clone)]
pub struct Record {
level: Level,
buffer: Vec<u8>,
source: Source,
}
impl Record {
#[inline]
pub fn new(level: Level, source: Source) -> Self {
let mut obj = Self {level, buffer: vec![], source};
obj.buffer.push(b'{');
obj
}
#[inline]
pub fn set(mut record: Record, level: Level, source: Source) -> Self {
record.level = level;
record.buffer.truncate(1); record.source = source;
record
}
#[inline]
pub fn level(&self) -> Level {
self.level
}
#[inline]
pub fn source(&self) -> &Source {
&self.source
}
#[inline]
pub fn append(&mut self, key: &str, val: &impl Encode) -> &mut Self {
key.encode(&mut self.buffer);
self.buffer.push(b':');
val.encode(&mut self.buffer);
self.buffer.push(b',');
self
}
#[inline]
pub fn finish(&mut self) {
match self.buffer.last_mut() {
Some(val) if *val == b',' => *val = b'}',
_ => self.buffer.push(b'}'),
}
self.buffer.push(b'\n');
}
#[inline]
pub fn buffer(&self) -> &Vec<u8> {
&self.buffer
}
}