hayabusa_ser_derive/
lib.rs1use proc_macro::TokenStream;
5use quote::quote;
6use syn::{parse_macro_input, DeriveInput};
7
8#[proc_macro_derive(ZcDeserialize)]
9pub fn derive_zc_deserialize(input: TokenStream) -> TokenStream {
10 let input = parse_macro_input!(input as DeriveInput);
11 let name = input.ident;
12
13 let expanded = quote! {
14 impl ZcDeserialize for #name {}
15 };
16
17 TokenStream::from(expanded)
18}
19
20#[proc_macro_derive(ZcDeserializeMut)]
21pub fn derive_zc_deserialize_mut(input: TokenStream) -> TokenStream {
22 let input = parse_macro_input!(input as DeriveInput);
23 let name = input.ident;
24
25 let expanded = quote! {
26 impl ZcDeserializeMut for #name {}
27 };
28
29 TokenStream::from(expanded)
30}
31
32#[proc_macro_derive(Deserialize)]
33pub fn derive_deserialize(input: TokenStream) -> TokenStream {
34 let input = parse_macro_input!(input as DeriveInput);
35 let name = input.ident;
36
37 let expanded = quote! {
38 impl Deserialize for #name {}
39 };
40
41 TokenStream::from(expanded)
42}
43
44#[proc_macro_derive(DeserializeMut)]
45pub fn derive_deserialize_mut(input: TokenStream) -> TokenStream {
46 let input = parse_macro_input!(input as DeriveInput);
47 let name = input.ident;
48
49 let expanded = quote! {
50 impl DeserializeMut for #name {}
51 };
52
53 TokenStream::from(expanded)
54}
55
56#[proc_macro_derive(Zc)]
57pub fn derive_zc(input: TokenStream) -> TokenStream {
58 let input = parse_macro_input!(input as DeriveInput);
59 let name = input.ident;
60
61 let expanded = quote! {
62 impl Zc for #name {}
63 };
64
65 TokenStream::from(expanded)
66}
67
68#[proc_macro_derive(ZcInitialize)]
69pub fn derive_zc_initialize(input: TokenStream) -> TokenStream {
70 let input = parse_macro_input!(input as DeriveInput);
71 let name = input.ident;
72
73 let expanded = quote! {
74 impl ZcInitialize for #name {}
75 };
76
77 TokenStream::from(expanded)
78}
79
80#[proc_macro_derive(FromBytesUnchecked)]
81pub fn derive_from_bytes_unchecked(input: TokenStream) -> TokenStream {
82 let input = parse_macro_input!(input as DeriveInput);
83 let name = input.ident;
84
85 let expanded = quote! {
86 impl FromBytesUnchecked for #name {
87 unsafe fn from_bytes_unchecked<'a>(bytes: &'a [u8]) -> &'a #name {
88 &*(bytes.as_ptr() as *const #name)
89 }
90 }
91 };
92
93 TokenStream::from(expanded)
94}