instrs_derive/
lib.rs

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}