use serde;
use serde_json;
use super::prelude::*;
pub struct ContextWriter {
format: Format,
output: Output,
}
impl ContextWriter {
pub fn new(format: Format, output: Output) -> ContextWriter {
ContextWriter { format, output }
}
pub fn write<T: serde::Serialize>(&mut self, key: &str, value: &T) -> io::Result<()> {
match self.format {
Format::Json => {
self.output.write(b",")?;
serde_json::to_writer(&mut self.output, key)?;
self.output.write(b":")?;
serde_json::to_writer(&mut self.output, value)?;
}
ref format => {
if format.is_colored() {
self.output.set_color(Color::Cyan)?;
}
write!(self.output, " {}=", key)?;
if format.is_colored() {
self.output.set_color(Color::BrightCyan)?;
}
serde_json::to_writer(&mut self.output, value)?;
self.output.reset_colors()?;
}
}
Ok(())
}
}
impl Drop for ContextWriter {
fn drop(&mut self) {
match self.format {
Format::Json => {
write!(self.output, "}}\n").ok();
}
_ => {
write!(self.output, "\n").ok();
}
}
}
}