lua-bind 0.1.0

Thread-safe Lua binding system with automatic type registration and dependency injection
use lua_bind::{LuaBindError, get_lua, register_binding};
use serde::{Serialize, Deserialize};

#[derive(Default, Serialize, Deserialize)]
struct User {
    name: String,
    age: u32,
}

impl mlua::UserData for User {
    fn add_methods<'lua, M: mlua::UserDataMethods<'lua, Self>>(methods: &mut M) {
        methods.add_function("from_json", |_, json: String| {
            serde_json::from_str::<User>(&json)
                .map_err(|e| mlua::Error::external(LuaBindError::Serialization(e.to_string())))
        });
        methods.add_method("to_json", |_, this, ()| {
            serde_json::to_string(this)
                .map_err(|e| mlua::Error::external(LuaBindError::Serialization(e.to_string())))
        });
    }
}

register_binding!(User);

fn main() {
    let lua = get_lua().unwrap();
    lua.load(r#"
        local user = Rust.User.from_json('{"name":"Alice","age":25}')
        local json = user:to_json()
        print("JSON:", json)
    "#).exec().unwrap();
}