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()
}