1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
extern crate proc_macro; extern crate static_reflect_derive_internals as internals; use syn::{parse_macro_input, Item, DeriveInput}; #[proc_macro_derive(StaticReflect, attributes(reflect, static_reflect))] pub fn derive_static_reflect(raw_input: proc_macro::TokenStream) -> proc_macro::TokenStream { let input: DeriveInput = parse_macro_input!(raw_input as DeriveInput); match internals::fields::derive_static_reflect(&input) { Ok(tokens) => tokens.into(), Err(e) => e.into_compile_error().into() } } #[proc_macro_attribute] pub fn reflect_func(args: proc_macro::TokenStream, input: proc_macro::TokenStream) -> proc_macro::TokenStream { let _original_input = input.clone(); let input: Item = parse_macro_input!(input as Item); let args = parse_macro_input!(args as internals::func::FuncArgs); match internals::derive_reflect_func(args, &input) { Ok(tokens) => tokens.into(), Err(e) => e.into_compile_error().into() } }