1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
extern crate proc_macro; use proc_macro::TokenStream; use syn::parse_macro_input; mod dialogue; mod handler; #[proc_macro_attribute] pub fn dialogue(_args: TokenStream, input: TokenStream) -> TokenStream { let input = parse_macro_input!(input as dialogue::DialogueMeta); TokenStream::from(dialogue::build(input)) } #[proc_macro_attribute] pub fn handler(args: TokenStream, input: TokenStream) -> TokenStream { let input = parse_macro_input!(input as handler::HandlerMeta); let args = if args.is_empty() { None } else { Some(parse_macro_input!(args as handler::HandlerArgs)) }; TokenStream::from(handler::build(input, args)) }