feat: Added attribute to easily register additional lua methods
Previously this could only be done by implementing a trait, like `AddAdditionalMethods`, that that has an add_methods function where you can put your custom methods. With this new attribute you can pass in a register function directly!
This commit is contained in:
@@ -32,26 +32,40 @@ pub fn lua_serialize(input: proc_macro::TokenStream) -> proc_macro::TokenStream
|
||||
|
||||
/// Derive macro generating an impl for the trait `::mlua::UserData`
|
||||
///
|
||||
/// # Device traits
|
||||
/// The `device(traits)` attribute can be used to tell the macro what traits are implemented so that
|
||||
/// the appropriate methods can automatically be registered.
|
||||
/// If the struct does not have any type parameters the syntax is very simple:
|
||||
/// ```
|
||||
/// ```rust
|
||||
/// #[device(traits(TraitA, TraitB))]
|
||||
/// ```
|
||||
///
|
||||
/// If the type does have type parameters you will have to manually specify all variations that
|
||||
/// have the trait available:
|
||||
/// ```
|
||||
/// ```rust
|
||||
/// #[device(traits(TraitA, TraitB for <StateA>, <StateB>))]
|
||||
/// ```
|
||||
/// If multiple of these attributes are specified they will all combined appropriately.
|
||||
///
|
||||
///
|
||||
/// # NOTE
|
||||
/// ## NOTE
|
||||
/// If your type _has_ type parameters any instance of the traits attribute that does not specify
|
||||
/// any type parameters will have the traits applied to _all_ other type parameter variations
|
||||
/// listed in the other trait attributes. This behavior only applies if there is at least one
|
||||
/// instance with type parameters specified.
|
||||
///
|
||||
/// # Additional methods
|
||||
/// Additional methods can be added by using the `device(add_methods)` attribute. This attribute
|
||||
/// takes the path to a function with the following signature that can register the additional methods:
|
||||
///
|
||||
/// ```rust
|
||||
/// # struct D;
|
||||
/// fn top_secret<M: mlua::UserDataMethods<D>>(methods: &mut M) {}
|
||||
/// ```
|
||||
/// It can then be registered with:
|
||||
/// ```rust
|
||||
/// #[device(add_methods(top_secret))]
|
||||
/// ```
|
||||
#[proc_macro_derive(Device, attributes(device))]
|
||||
pub fn device(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
|
||||
let ast = parse_macro_input!(input as DeriveInput);
|
||||
|
||||
Reference in New Issue
Block a user