remoc_macro/
lib.rs

1#![forbid(unsafe_code)]
2
3//! Procedural macros for Remoc.
4
5use quote::quote;
6use syn::{meta, parse_macro_input};
7
8mod method;
9mod trait_def;
10mod util;
11
12use crate::trait_def::TraitDef;
13
14#[proc_macro_attribute]
15pub fn remote(args: proc_macro::TokenStream, input: proc_macro::TokenStream) -> proc_macro::TokenStream {
16    let mut trait_def = parse_macro_input!(input as TraitDef);
17    let meta_parser = meta::parser(|meta| trait_def.parse_meta(meta));
18    parse_macro_input!(args with meta_parser);
19
20    let vanilla_trait = trait_def.vanilla_trait();
21    let request_enums = trait_def.request_enums();
22    let servers = trait_def.servers();
23    let client = trait_def.client();
24
25    #[allow(clippy::let_and_return)]
26    let output = proc_macro::TokenStream::from(quote! {
27        #vanilla_trait
28        #request_enums
29        #servers
30        #client
31    });
32
33    // println!("{}", &output);
34
35    output
36}