boltbuild 0.1.0

BoltBuild is a programmable build system.
Documentation
use crate::context::Context;
use mlua::prelude::{LuaError, LuaFunction, LuaResult, LuaValue};
use mlua::{AnyUserData, Lua};

pub(super) fn debug(_lua: &Lua, this: &mut Context, message: String) -> LuaResult<()> {
    this.logger.debug(message.as_str());
    Ok(())
}

pub(super) fn info(_lua: &Lua, this: &mut Context, message: String) -> LuaResult<()> {
    this.logger.info(message.as_str());
    Ok(())
}

pub(super) fn warn(_lua: &Lua, this: &mut Context, message: String) -> LuaResult<()> {
    this.logger.warning(message.as_str());
    Ok(())
}

pub(super) fn error(_lua: &Lua, this: &mut Context, message: String) -> LuaResult<()> {
    this.logger.error(message.as_str());
    Ok(())
}

pub(super) fn raise_error(_lua: &Lua, _this: &mut Context, message: String) -> LuaResult<()> {
    Err(LuaError::RuntimeError(message))
}

pub(super) fn print(_lua: &Lua, this: &mut Context, message: String) -> LuaResult<()> {
    this.logger.print(message.as_str());
    Ok(())
}

pub(super) fn colored_print(_lua: &Lua, this: &mut Context, message: String) -> LuaResult<()> {
    this.logger.colored_print(message.as_str());
    Ok(())
}

pub(super) fn lua_try(_lua: &Lua, args: (AnyUserData, String, LuaFunction)) -> LuaResult<bool> {
    args.0.borrow_mut_scoped::<Context, _>(|this| {
        this.logger.begin(args.1.as_str());
    })?;
    let result: LuaResult<LuaValue> = args.2.call(());
    args.0
        .borrow_mut_scoped::<Context, _>(|this| match result {
            Ok(v) => {
                if v.is_nil() {
                    this.logger.end("Ok", true);
                } else {
                    this.logger.end(v.to_string()?.as_str(), true);
                }
                Ok(true)
            }
            Err(e) => {
                match &e {
                    LuaError::RuntimeError(s) => {
                        this.logger.end(s.as_str(), false);
                    }
                    LuaError::CallbackError {
                        traceback: _,
                        cause,
                    } => match cause.as_ref() {
                        LuaError::RuntimeError(s) => {
                            this.logger.end(s.as_str(), false);
                        }
                        _ => {
                            this.logger.end(e.to_string().as_str(), false);
                        }
                    },
                    _ => {
                        this.logger.end(e.to_string().as_str(), false);
                    }
                }
                Ok(false)
            }
        })?
}