luau 0.732.0

Safe lifetime-bound Rust embedding API for the Luau runtime
use luau::Lua;

fn main() -> luau::Result<()> {
    let lua = Lua::new()?;

    {
        let globals = lua.globals()?;

        globals.set(
            "rust_add",
            luau::function!(|_lua, left: i32, right: i32| { Ok(left + right) }),
        )?;
        globals.set(
            "rust_checked_div",
            luau::function_raw!(|_lua, left: i32, right: i32| {
                if right == 0 {
                    Err("division by zero")
                } else {
                    Ok(left / right)
                }
            }),
        )?;
    }

    let value: i32 = lua
        .load("return rust_add(20, 22)")
        .set_name("rust_function")
        .call(())?;
    let (missing, error): (Option<i32>, String) = lua
        .load("return rust_checked_div(20, 0)")
        .set_name("rust_function")
        .call(())?;

    assert_eq!(missing, None);
    assert_eq!(error, "division by zero");
    println!("{value}");
    Ok(())
}