1#![feature(trait_alias)]
2
3mod serialize;
4mod util;
5mod info;
6
7use proc_macro2::TokenStream;
8use proc_macro::TokenStream as TStream;
9use quote_into::quote_into;
10use syn::{*, spanned::Spanned};
11
12use crate::serialize::*;
13use crate::info::Info;
14
15#[proc_macro_derive(Serialize)]
16pub fn derive_byte_serialize(input: TStream) -> TStream {
17 let input: Info = parse_macro_input!(input as DeriveInput).into();
18
19 let mut s = proc_macro2::TokenStream::new();
20
21 quote_into!{s +=
22 impl Serialize for #(input.name) {
23 #{impl_into_bytes(&input, s)}
24 #{impl_from_bytes(&input, s)}
25 }
26 }
27
28 s.into()
29}