gdnative_impl_proc_macros/
lib.rs1extern crate proc_macro;
2extern crate proc_macro2;
3#[macro_use]
4extern crate syn;
5#[macro_use]
6extern crate quote;
7
8use proc_macro::TokenStream;
9use syn::AttributeArgs;
10
11mod cfg_ex;
12mod doc;
13mod pool_array_element;
14
15#[proc_macro]
16pub fn impl_typed_array_element(input: TokenStream) -> TokenStream {
17 pool_array_element::impl_element(input)
18 .unwrap_or_else(to_compile_errors)
19 .into()
20}
21
22#[proc_macro]
23pub fn decl_typed_array_element(input: TokenStream) -> TokenStream {
24 pool_array_element::decl_element(input)
25 .unwrap_or_else(to_compile_errors)
26 .into()
27}
28
29#[proc_macro_attribute]
31pub fn cfg_ex(meta: TokenStream, item: TokenStream) -> TokenStream {
32 let args = parse_macro_input!(meta as AttributeArgs);
33 let attr = cfg_ex::expand_cfg_ex(args).unwrap_or_else(to_compile_errors);
34 let item = proc_macro2::TokenStream::from(item);
35 quote!(#attr #item).into()
36}
37
38#[proc_macro_attribute]
40pub fn cfg_attr_ex(meta: TokenStream, item: TokenStream) -> TokenStream {
41 let args = parse_macro_input!(meta as AttributeArgs);
42 let attr = cfg_ex::expand_cfg_attr_ex(args).unwrap_or_else(to_compile_errors);
43 let item = proc_macro2::TokenStream::from(item);
44 quote!(#attr #item).into()
45}
46
47fn to_compile_errors(error: syn::Error) -> proc_macro2::TokenStream {
48 let compile_error = error.to_compile_error();
49 quote!(#compile_error)
50}