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}