1use proc_macro::TokenStream;
2use quote::quote;
3use syn::{DeriveInput, parse_macro_input};
4
5#[proc_macro_derive(Dispatcher)]
6pub fn derive_dispatcher(input: TokenStream) -> TokenStream {
7 let input = parse_macro_input!(input as DeriveInput);
8 let ident = input.ident;
9
10 quote! {
11 #[waynest::async_trait::async_trait]
12 impl waynest::server::Dispatcher for #ident {
13 fn as_any(self: std::sync::Arc<Self>) -> std::sync::Arc<dyn std::any::Any + Send + Sync + 'static> {
14 self
15 }
16 async fn dispatch(
17 &self,
18 client: &mut waynest::server::Client,
19 sender_id: waynest::wire::ObjectId,
20 message: &mut waynest::wire::Message,
21 ) -> Result<()> {
22 self.handle_request(client, sender_id, message).await
23 }
24 }
25 }
26 .into()
27}
28
29#[proc_macro]
30#[cfg(feature = "gen")]
31pub fn server_protocol(input: TokenStream) -> TokenStream {
32 use syn::LitStr;
33
34 let _xml = parse_macro_input!(input as LitStr);
35 quote! {}.into()
36}
37
38#[proc_macro]
39#[cfg(feature = "gen")]
40pub fn client_protocol(input: TokenStream) -> TokenStream {
41 use syn::LitStr;
42
43 let _xml = parse_macro_input!(input as LitStr);
44 quote! {}.into()
45}