bflog 0.1.0

Very tiny logging framework made for microservices.
Documentation
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();
      }
    }
  }
}