organix_derive/
lib.rs

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}