Skip to main content

hx_plugins/api/
output.rs

1//! Output API for plugins.
2//!
3//! Provides: (hx/status), (hx/info), (hx/warn), (hx/error), (hx/debug)
4
5use 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
11/// Register output API functions.
12pub 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
21/// Print a status message: [action] message
22fn status(action: String, message: String) -> SteelVal {
23    // Use ANSI colors for output
24    eprintln!("\x1b[1;32m[{}]\x1b[0m {}", action, message);
25    SteelVal::Void
26}
27
28/// Print an info message.
29fn info(message: String) -> SteelVal {
30    eprintln!("{}", message);
31    SteelVal::Void
32}
33
34/// Print a warning message in yellow.
35fn warn(message: String) -> SteelVal {
36    eprintln!("\x1b[1;33mwarning:\x1b[0m {}", message);
37    SteelVal::Void
38}
39
40/// Print an error message in red.
41fn error(message: String) -> SteelVal {
42    eprintln!("\x1b[1;31merror:\x1b[0m {}", message);
43    SteelVal::Void
44}
45
46/// Print a debug message (only if verbose).
47fn 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}