sprocket_engine 0.2.1

A vulkan game engine
Documentation
use colorful::{Color, Colorful};
use log::*;

struct Logger;
static LOGGER: Logger = Logger;

/// Initializes a logger
pub fn init(level_filter: LevelFilter) -> Result<(), SetLoggerError> {
    log::set_logger(&LOGGER).map(|()| log::set_max_level(level_filter))
}

/// Initializes a default logger
/// Shows all messages in debug
/// Shows Error, Warn, Info in release
pub fn init_default() -> Result<(), SetLoggerError> {
    init(DEFAULT_LEVEL_FILTER)
}

#[cfg(debug_assertions)]
/// Shows all messages in debug
/// Shows Error, Warn, Info in release
pub const DEFAULT_LEVEL_FILTER: LevelFilter = LevelFilter::Trace;

#[cfg(not(debug_assertions))]
/// Shows all messages in debug
/// Shows Error, Warn, Info in release
pub const DEFAULT_LEVEL_FILTER: LevelFilter = LevelFilter::Info;

impl log::Log for Logger {
    fn enabled(&self, metadata: &Metadata) -> bool {
        metadata.level() <= log::max_level()
    }

    fn log(&self, record: &Record) {
        if !self.enabled(record.metadata()) {
            return;
        }

        let level = record.level();

        let color = match level {
            Level::Trace => Color::LightGray,
            Level::Debug => Color::LightGray,
            Level::Info => Color::Blue,
            Level::Warn => Color::Yellow,
            Level::Error => Color::Red,
        };

        println!(
            "[{}] {} - {}",
            level.to_string().color(color),
            record.target().split("::").last().unwrap_or("unknown"),
            record.args()
        );
    }

    fn flush(&self) {}
}