dremoc_macro/
lib.rs

1mod service;
2mod utils;
3use quote::quote;
4use syn::{meta, parse_macro_input};
5
6#[proc_macro_attribute]
7pub fn service(
8    args: proc_macro::TokenStream,
9    input: proc_macro::TokenStream,
10) -> proc_macro::TokenStream {
11    let mut service = parse_macro_input!(input as service::Service);
12    let meta_parser = meta::parser(|meta| service.parse_meta(meta));
13    parse_macro_input!(args with meta_parser);
14
15    let trait_def = service.trait_def();
16    let state_trait_def = service.state_trait_def();
17    let state_set_def = service.state_set_def();
18    let interns_mod_name = service.interns_mod_name();
19    let (handle_def, handle_interns_def) = service.handle_def();
20    let target_def = service.target_def();
21    let client_def = service.client_def();
22    let request_enums_def = service.request_enums_def();
23
24    quote! {
25        #trait_def
26        #state_trait_def
27        #state_set_def
28        #handle_def
29
30        mod #interns_mod_name {
31            use super::*;
32            #handle_interns_def
33            #target_def
34            #client_def
35            #request_enums_def
36        }
37    }
38    .into()
39}