himada-dispatch 0.1.1

Adaptive SIMD dispatch for Himada — auto-selects fastest kernel at runtime
use std::sync::OnceLock;

#[repr(u8)]
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub enum LogLevel {
    Error = 0,
    Warn = 1,
    Info = 2,
    Debug = 3,
    Trace = 4,
}

static LOG_LEVEL: OnceLock<LogLevel> = OnceLock::new();

fn parse_log_level(s: &str) -> LogLevel {
    match s.to_lowercase().as_str() {
        "error" => LogLevel::Error,
        "warn" => LogLevel::Warn,
        "info" => LogLevel::Info,
        "debug" => LogLevel::Debug,
        "trace" => LogLevel::Trace,
        _ => LogLevel::Info,
    }
}

fn effective_log_level() -> LogLevel {
    *LOG_LEVEL.get_or_init(|| {
        std::env::var("HIMADA_LOG")
            .ok()
            .map(|s| parse_log_level(&s))
            .unwrap_or(LogLevel::Info)
    })
}

pub fn log(level: LogLevel, msg: &str) {
    if (level as u8) <= (effective_log_level() as u8) {
        eprintln!("[himada::{:?}] {}", level, msg);
    }
}