warqueen_derive/lib.rs
1use proc_macro::TokenStream;
2use quote::quote;
3use syn::{parse_macro_input, DeriveInput};
4
5/// Implements the `NetSend` trait.
6///
7/// # Examples
8///
9/// ```rust
10/// use serde::Serialize;
11/// use warqueen::NetSend;
12/// # use warqueen_derive::NetSend;
13///
14/// #[derive(Serialize, NetSend)]
15/// enum MessageClientToServer {
16/// HelloFromClient,
17/// String(String),
18/// }
19/// ```
20#[proc_macro_derive(NetSend)]
21pub fn derive_net_send(input: TokenStream) -> TokenStream {
22 let input = parse_macro_input!(input as DeriveInput);
23 let ident = input.ident;
24 // TODO: Mark the impl as `#[automatically_derived]`?
25 quote! {
26 impl warqueen::NetSend for #ident {}
27 }
28 .into()
29}
30
31/// Implements the `NetReceive` trait.
32///
33/// # Examples
34///
35/// ```rust
36/// use serde::Deserialize;
37/// use warqueen::NetReceive;
38/// # use warqueen_derive::NetReceive;
39///
40/// #[derive(Deserialize, NetReceive)]
41/// enum MessageServerToClient {
42/// HelloFromServer,
43/// String(String),
44/// }
45/// ```
46#[proc_macro_derive(NetReceive)]
47pub fn derive_net_receive(input: TokenStream) -> TokenStream {
48 let input = parse_macro_input!(input as DeriveInput);
49 let ident = input.ident;
50 // TODO: Mark the impl as `#[automatically_derived]`?
51 quote! {
52 impl warqueen::NetReceive for #ident {}
53 }
54 .into()
55}