waynest_macros/
lib.rs

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}