pub trait UserData: Sized {
// Provided methods
fn add_methods<'lua, T: UserDataMethods<'lua, Self>>(_methods: &mut T) { ... }
fn get_uvalues_count(&self) -> c_int { ... }
}
Expand description
Trait for custom userdata types.
By implementing this trait, a struct becomes eligible for use inside Lua code. Implementations
of ToLua
and FromLua
are automatically provided.
Examples
struct MyUserData(i32);
impl UserData for MyUserData {}
// `MyUserData` now implements `ToLua`:
lua_context.globals().set("myobject", MyUserData(123))?;
lua_context.load("assert(type(myobject) == 'userdata')").exec()?;
Custom methods and operators can be provided by implementing add_methods
(refer to
UserDataMethods
for more information):
struct MyUserData(i32);
impl UserData for MyUserData {
fn add_methods<'lua, M: UserDataMethods<'lua, Self>>(methods: &mut M) {
methods.add_method("get", |_, this, _: ()| {
Ok(this.0)
});
methods.add_method_mut("add", |_, this, value: i32| {
this.0 += value;
Ok(())
});
methods.add_meta_method(MetaMethod::Add, |_, this, value: i32| {
Ok(this.0 + value)
});
}
}
lua_context.globals().set("myobject", MyUserData(123))?;
lua_context.load(r#"
assert(myobject:get() == 123)
myobject:add(7)
assert(myobject:get() == 130)
assert(myobject + 10 == 140)
"#).exec()?;
Provided Methods§
sourcefn add_methods<'lua, T: UserDataMethods<'lua, Self>>(_methods: &mut T)
fn add_methods<'lua, T: UserDataMethods<'lua, Self>>(_methods: &mut T)
Adds custom methods and operators specific to this userdata.
sourcefn get_uvalues_count(&self) -> c_int
fn get_uvalues_count(&self) -> c_int
Used to determine how many user values this userdata should have. Defaults to a single user value.
Object Safety§
This trait is not object safe.