ice_core 0.5.1

High performance Web engine

use ansi_term::Style;
use ansi_term::Colour::*;
use chrono;

#[derive(Clone)]
pub struct Logger<'a> {
    module_name: &'a str
}

impl<'a> Logger<'a> {
    pub fn new(module_name: &'a str) -> Logger<'a> {
        Logger {
            module_name: module_name
        }
    }

    pub fn log(&self, msg: Message) {
        let local_time: chrono::DateTime<chrono::Local> = chrono::Local::now();
        let date = local_time.format("%a %b %e %T %Y").to_string();

        let (kind, text) = match msg {
            Message::Info(t) => (Green.paint("[INFO]").to_string(), t),
            Message::Warning(t) => (Yellow.paint("[WARNING]").to_string(), t),
            Message::Error(t) => (Red.paint("[ERROR]").to_string(), t)
        };

        println!("{} {} {}: {}", Cyan.bold().paint(date.as_str()), Style::new().bold().paint(kind), self.module_name, text);
    }
}

pub enum Message {
    Info(String),
    Warning(String),
    Error(String)
}

macro_rules! logger {
    ($name:expr) => (::logging::Logger::new($name))
}

macro_rules! dinfo {
    ($logger:expr, $fmt:expr) => (
        $logger.log(
            ::logging::Message::Info(format!($fmt))
        )
    );
    ($logger:expr, $fmt:expr, $($arg:tt)*) => (
        $logger.log(
            ::logging::Message::Info(format!($fmt, $($arg)*))
        )
    );
}

macro_rules! dwarning {
    ($logger:expr, $fmt:expr) => (
        $logger.log(
            ::logging::Message::Warning(format!($fmt))
        )
    );
    ($logger:expr, $fmt:expr, $($arg:tt)*) => (
        $logger.log(
            ::logging::Message::Warning(format!($fmt, $($arg)*))
        )
    );
}

macro_rules! derror {
    ($logger:expr, $fmt:expr) => (
        $logger.log(
            ::logging::Message::Error(format!($fmt))
        )
    );
    ($logger:expr, $fmt:expr, $($arg:tt)*) => (
        $logger.log(
            ::logging::Message::Error(format!($fmt, $($arg)*))
        )
    );
}