winston 0.1.0

winston for rust
Documentation
use std::{collections::HashMap, sync::Arc};

use super::{transports::Transport, Logger, LoggerOptions};

pub struct LoggerBuilder {
    levels: Option<HashMap<String, u8>>,
    format: Option<String>,
    level: Option<String>,
    transports: Option<Vec<Arc<dyn Transport + Send + Sync>>>,
}

impl LoggerBuilder {
    pub fn new() -> Self {
        LoggerBuilder {
            levels: None,
            format: None,
            level: None,
            transports: None,
        }
    }

    pub fn levels(mut self, levels: HashMap<String, u8>) -> Self {
        self.levels = Some(levels);
        self
    }

    pub fn format(mut self, format: String) -> Self {
        self.format = Some(format);
        self
    }

    pub fn level(mut self, level: String) -> Self {
        self.level = Some(level);
        self
    }

    pub fn transports(mut self, transports: Vec<Arc<dyn Transport + Send + Sync>>) -> Self {
        self.transports = Some(transports);
        self
    }

    pub fn build(self) -> Logger {
        let options = LoggerOptions {
            levels: self.levels.or_else(|| LoggerOptions::default().levels),
            format: self.format.or_else(|| LoggerOptions::default().format),
            level: self.level.or_else(|| LoggerOptions::default().level),
            transports: self
                .transports
                .or_else(|| LoggerOptions::default().transports),
        };

        Logger::new(Some(options))
    }
}