winston 0.1.0

winston for rust
Documentation
use serde::Serialize;
use serde_json::Value;
use std::collections::HashMap;

#[derive(Debug, Serialize)]
pub struct LogEntry {
    pub level: String,
    pub message: String,
    options: HashMap<String, Value>,
}

impl LogEntry {
    pub fn builder(level: &str, message: &str) -> LogEntryBuilder {
        LogEntryBuilder::new(level, message)
    }
}

pub struct LogEntryBuilder {
    level: String,
    message: String,
    options: HashMap<String, Value>,
}

impl LogEntryBuilder {
    fn new(level: &str, message: &str) -> Self {
        LogEntryBuilder {
            level: level.to_string(),
            message: message.to_string(),
            options: HashMap::new(),
        }
    }

    pub fn option(mut self, key: &str, value: Value) -> Self {
        self.options.insert(key.to_string(), value);
        self
    }

    pub fn build(self) -> LogEntry {
        LogEntry {
            level: self.level,
            message: self.message,
            options: self.options,
        }
    }
}