Skip to main content

mlua_derive/
lib.rs

1use proc_macro::TokenStream;
2
3mod module;
4
5#[cfg(feature = "macros")]
6use crate::chunk::Chunk;
7
8#[cfg(feature = "macros")]
9macro_rules! try_compile {
10    ($expr:expr) => {
11        match $expr {
12            Ok(val) => val,
13            Err(err) => return err.to_compile_error().into(),
14        }
15    };
16}
17
18#[proc_macro_attribute]
19pub fn lua_module(attr: TokenStream, item: TokenStream) -> TokenStream {
20    module::lua_module(attr, item)
21}
22
23#[cfg(feature = "macros")]
24#[proc_macro]
25pub fn chunk(input: TokenStream) -> TokenStream {
26    match Chunk::new(input) {
27        Ok(chunk) => chunk.expand().into(),
28        Err(err) => err.into(),
29    }
30}
31
32#[cfg(feature = "macros")]
33#[proc_macro_derive(FromLua)]
34pub fn from_lua(input: TokenStream) -> TokenStream {
35    from_lua::from_lua(input)
36}
37
38/// Derive macro for implementing `UserData` for a Rust type.
39#[cfg(feature = "macros")]
40#[proc_macro_derive(UserData, attributes(lua))]
41pub fn userdata(item: TokenStream) -> TokenStream {
42    userdata::userdata_type(item)
43}
44
45/// Attribute macro for exposing impl block methods to Lua userdata.
46#[cfg(feature = "macros")]
47#[proc_macro_attribute]
48pub fn userdata_impl(attr: TokenStream, item: TokenStream) -> TokenStream {
49    userdata::userdata_impl::userdata_impl(attr, item)
50}
51
52#[cfg(feature = "macros")]
53mod chunk;
54#[cfg(feature = "macros")]
55mod from_lua;
56#[cfg(feature = "macros")]
57mod userdata;