1use crate::context::with_context;
6use crate::error::Result;
7use steel::SteelVal;
8use steel::steel_vm::engine::Engine;
9use steel::steel_vm::register_fn::RegisterFn;
10
11pub fn register(engine: &mut Engine) -> Result<()> {
13 engine.register_fn("hx/status", status);
14 engine.register_fn("hx/info", info);
15 engine.register_fn("hx/warn", warn);
16 engine.register_fn("hx/error", error);
17 engine.register_fn("hx/debug", debug);
18 Ok(())
19}
20
21fn status(action: String, message: String) -> SteelVal {
23 eprintln!("\x1b[1;32m[{}]\x1b[0m {}", action, message);
25 SteelVal::Void
26}
27
28fn info(message: String) -> SteelVal {
30 eprintln!("{}", message);
31 SteelVal::Void
32}
33
34fn warn(message: String) -> SteelVal {
36 eprintln!("\x1b[1;33mwarning:\x1b[0m {}", message);
37 SteelVal::Void
38}
39
40fn error(message: String) -> SteelVal {
42 eprintln!("\x1b[1;31merror:\x1b[0m {}", message);
43 SteelVal::Void
44}
45
46fn debug(message: String) -> SteelVal {
48 let verbose = with_context(|ctx| ctx.verbose).unwrap_or(false);
49 if verbose {
50 eprintln!("\x1b[2mdebug:\x1b[0m {}", message);
51 }
52 SteelVal::Void
53}