1extern crate proc_macro;
2use proc_macro_error::proc_macro_error;
3use quote::quote;
4use syn::{parse_macro_input, DeriveInput};
5
6mod ast;
7mod gen;
8mod symbol;
9
10#[proc_macro_derive(Organix, attributes(runtime))]
11#[proc_macro_error]
12pub fn derive_organix(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
13 let input = parse_macro_input!(input as DeriveInput);
14 let ast = ast::Input::from_syn(&input).unwrap();
15 let gen = gen::gen(ast);
16 gen.into()
17}
18
19#[proc_macro_derive(IntercomMsg)]
20pub fn derive_intercom_msg(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
21 let input = parse_macro_input!(input as DeriveInput);
22 let name = &input.ident;
23 let gen = quote! {
24 impl organix::service::IntercomMsg for #name {}
25 };
26 gen.into()
27}