hayabusa_ser_derive/
lib.rs

1// Copyright (c) 2025, Arcane Labs <dev@arcane.fi>
2// SPDX-License-Identifier: Apache-2.0
3
4use 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}