mlua 0.6.0-beta.1

High level bindings to Lua 5.4/5.3/5.2/5.1 (including LuaJIT) with async/await features and support of writing native lua modules in Rust.
Documentation
use mlua::{AnyUserData, Lua, Table, UserData, Result};

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

    // Should not allow userdata borrow to outlive lifetime of AnyUserData handle
    struct MyUserData;
    impl UserData for MyUserData {};
    let _userdata_ref;
    {
        let touter = globals.get::<_, Table>("touter")?;
        touter.set("userdata", lua.create_userdata(MyUserData)?)?;
        let userdata = touter.get::<_, AnyUserData>("userdata")?;
        _userdata_ref = userdata.borrow::<MyUserData>();
        //~^ error: `userdata` does not live long enough
    }
    Ok(())
}