factorio-mlua 0.8.0

High level bindings to Lua 5.4/5.3/5.2/5.1 (including LuaJIT) and Roblox Luau with async/await features and support of writing native Lua modules in Rust. Fork with added Factorio Lua support.
Documentation
use mlua::{chunk, ExternalResult, Lua, LuaSerdeExt, Result};

#[tokio::main]
async fn main() -> Result<()> {
    let lua = Lua::new();

    let null = lua.null();

    let fetch_json = lua.create_async_function(|lua, uri: String| async move {
        let resp = reqwest::get(&uri)
            .await
            .and_then(|resp| resp.error_for_status())
            .to_lua_err()?;
        let json = resp.json::<serde_json::Value>().await.to_lua_err()?;
        lua.to_value(&json)
    })?;

    let f = lua
        .load(chunk! {
            function print_r(t, indent)
                local indent = indent or ""
                for k, v in pairs(t) do
                    io.write(indent, tostring(k))
                    if type(v) == "table" then io.write(":\n") print_r(v, indent.."  ")
                    else io.write(": ", v == $null and "null" or tostring(v), "\n") end
                end
            end

            local res = $fetch_json(...)
            print_r(res)
        })
        .into_function()?;

    f.call_async("https://httpbin.org/anything?arg0=val0").await
}