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 26 27
extern crate proc_macro; use proc_macro_error::proc_macro_error; use quote::quote; use syn::{parse_macro_input, DeriveInput}; mod ast; mod gen; mod symbol; #[proc_macro_derive(Organix, attributes(runtime))] #[proc_macro_error] pub fn derive_organix(input: proc_macro::TokenStream) -> proc_macro::TokenStream { let input = parse_macro_input!(input as DeriveInput); let ast = ast::Input::from_syn(&input).unwrap(); let gen = gen::gen(ast); gen.into() } #[proc_macro_derive(IntercomMsg)] pub fn derive_intercom_msg(input: proc_macro::TokenStream) -> proc_macro::TokenStream { let input = parse_macro_input!(input as DeriveInput); let name = &input.ident; let gen = quote! { impl organix::service::IntercomMsg for #name {} }; gen.into() }