luajit2-sys 0.0.2

LuaJIT-2.1 FFI Bindings
Documentation
use luajit2_sys as sys;

#[test]
fn run_script() {
    use std::ffi::CStr;
    use std::ptr;

    unsafe {
        let lua = sys::luaL_newstate();
        assert_ne!(lua, ptr::null_mut());
        sys::luaL_openlibs(lua);
        let script_data = b"return 1 + 2";
        let script_name = b"run_script\0";
        let mut error = sys::luaL_loadbuffer(
            lua,
            script_data.as_ptr() as _,
            script_data.len() as _,
            script_name.as_ptr() as _,
        );
        if error != 0 {
            eprintln!("luaL_loadbuffer failed");
        } else {
            error = sys::lua_pcall(lua, 0, 1, 0);
            if error != 0 {
                eprintln!("lua_pcall failed");
            }
        }

        let idx = sys::lua_gettop(lua);
        println!("lua_gettop = {}", idx);

        let s = sys::lua_tostring(lua, idx);
        assert_ne!(s, ptr::null(), "lua_tostring returned null");

        let result = CStr::from_ptr(s).to_string_lossy().to_string();
        sys::lua_close(lua);

        assert_eq!("3", result);
    }
}