shape-runtime 0.2.0

Bytecode compiler, builtins, and runtime infrastructure for Shape
Documentation
/// @module std::core::log
/// Logging module — structured output with level filtering
///
/// Levels (from most to least verbose): trace, debug, info, warn, error
/// Default level: debug (all messages shown)

// Level constants
let LOG_LEVEL_TRACE = 0
let LOG_LEVEL_DEBUG = 1
let LOG_LEVEL_INFO = 2
let LOG_LEVEL_WARN = 3
let LOG_LEVEL_ERROR = 4

// Current minimum level — default to debug (show everything)
let mut current_level = 1

/// Set the minimum log level.
/// Valid levels: "trace", "debug", "info", "warn", "error"
pub fn set_level(level) {
    current_level = _level_num(level)
}

/// Log a trace-level message
pub fn trace(msg) {
    if current_level <= LOG_LEVEL_TRACE {
        print(f"[TRACE] {msg}")
    }
}

/// Log a debug-level message
pub fn debug(msg) {
    if current_level <= LOG_LEVEL_DEBUG {
        print(f"[DEBUG] {msg}")
    }
}

/// Log an info-level message
pub fn info(msg) {
    if current_level <= LOG_LEVEL_INFO {
        print(f"[INFO] {msg}")
    }
}

/// Log a warning-level message
pub fn warn(msg) {
    if current_level <= LOG_LEVEL_WARN {
        print(f"[WARN] {msg}")
    }
}

/// Log an error-level message
pub fn error(msg) {
    if current_level <= LOG_LEVEL_ERROR {
        print(f"[ERROR] {msg}")
    }
}

fn _level_num(level) {
    if level == "trace" { return 0 }
    if level == "debug" { return 1 }
    if level == "info" { return 2 }
    if level == "warn" || level == "warning" { return 3 }
    if level == "error" { return 4 }
    // Default to info for unknown levels
    2
}