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(())
}