mod service;
mod utils;
use quote::quote;
use syn::{meta, parse_macro_input};
#[proc_macro_attribute]
pub fn service(
args: proc_macro::TokenStream,
input: proc_macro::TokenStream,
) -> proc_macro::TokenStream {
let mut service = parse_macro_input!(input as service::Service);
let meta_parser = meta::parser(|meta| service.parse_meta(meta));
parse_macro_input!(args with meta_parser);
let trait_def = service.trait_def();
let state_trait_def = service.state_trait_def();
let state_set_def = service.state_set_def();
let interns_mod_name = service.interns_mod_name();
let (handle_def, handle_interns_def) = service.handle_def();
let target_def = service.target_def();
let client_def = service.client_def();
let request_enums_def = service.request_enums_def();
quote! {
#trait_def
#state_trait_def
#state_set_def
#handle_def
mod #interns_mod_name {
use super::*;
#handle_interns_def
#target_def
#client_def
#request_enums_def
}
}
.into()
}