use crate::context::with_context;
use crate::error::Result;
use steel::SteelVal;
use steel::steel_vm::engine::Engine;
use steel::steel_vm::register_fn::RegisterFn;
pub fn register(engine: &mut Engine) -> Result<()> {
engine.register_fn("hx/status", status);
engine.register_fn("hx/info", info);
engine.register_fn("hx/warn", warn);
engine.register_fn("hx/error", error);
engine.register_fn("hx/debug", debug);
Ok(())
}
fn status(action: String, message: String) -> SteelVal {
eprintln!("\x1b[1;32m[{}]\x1b[0m {}", action, message);
SteelVal::Void
}
fn info(message: String) -> SteelVal {
eprintln!("{}", message);
SteelVal::Void
}
fn warn(message: String) -> SteelVal {
eprintln!("\x1b[1;33mwarning:\x1b[0m {}", message);
SteelVal::Void
}
fn error(message: String) -> SteelVal {
eprintln!("\x1b[1;31merror:\x1b[0m {}", message);
SteelVal::Void
}
fn debug(message: String) -> SteelVal {
let verbose = with_context(|ctx| ctx.verbose).unwrap_or(false);
if verbose {
eprintln!("\x1b[2mdebug:\x1b[0m {}", message);
}
SteelVal::Void
}