Skip to content

Conversation

ArchangelJTW
Copy link

@ArchangelJTW ArchangelJTW commented Jul 12, 2024

I just made it but it seems useful so far, at least for me it is, works with most primitives so I think it's worth adding to help reduce boilerplate:

use mlua::{FromLua, Function, Lua, LuaOptions, StdLib, ToLua};
use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize, FromLua, Clone, ToLua)] // new ToLua derive macro
struct MyType {
    x: u32,
    y: String,
}

fn main() {
    let lua = Lua::new_with(StdLib::ALL_SAFE, LuaOptions::default()).unwrap();
    

    let lua_code = r#"
        function(myType)
              print(myType.x, myType.y)
        end
    "#;


    let f: Function = lua.load(lua_code).eval().unwrap();

    let my_type = MyType {
        x: 6,
        y: "hi, from rust to lua".into()
    };

    f.call::<MyType, ()>(my_type).unwrap();

}

@ArchangelJTW
Copy link
Author

ArchangelJTW commented Jul 13, 2024

I updated it to implement UserData instead of IntoLua, this works more cleanly with passing the type in and out of lua, it will use copy on rust primitives, otherwise it will clone. It could probably be updated to include field annotations of some kind in order to be more customizable and efficient. It currently creates a simple getter and setter for all the struct fields.

@ArchangelJTW
Copy link
Author

Added a ToLuaTable and FromLuaTable macro, this essentially, in a way, allows you serialize and deserialize Lua tables to and from rust types.

@vhyrro
Copy link
Contributor

vhyrro commented Nov 13, 2024

This would be a fantastic addition, are there any major blockers that must be addressed for this PR? I volunteer to help out if need be :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants