use crate::context::{with_context, with_context_mut};
use crate::error::Result;
use std::env;
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/config-get", config_get);
engine.register_fn("hx/env-get", env_get);
engine.register_fn("hx/env-set!", env_set);
engine.register_fn("hx/verbose?", is_verbose);
Ok(())
}
fn config_get(_section: String, _key: String) -> SteelVal {
SteelVal::BoolV(false)
}
fn env_get(name: String) -> SteelVal {
match env::var(&name) {
Ok(value) => SteelVal::StringV(value.into()),
Err(_) => SteelVal::BoolV(false),
}
}
fn env_set(name: String, value: String) -> SteelVal {
with_context_mut(|ctx| {
ctx.set_env(name, value);
});
SteelVal::Void
}
fn is_verbose() -> SteelVal {
with_context(|ctx| SteelVal::BoolV(ctx.verbose)).unwrap_or(SteelVal::BoolV(false))
}