Skip to main content

azalea_buf_macros/
lib.rs

1mod read;
2mod write;
3
4use proc_macro::TokenStream;
5use quote::quote;
6use syn::{DeriveInput, parse_macro_input};
7
8#[proc_macro_derive(AzBuf, attributes(var, limit))]
9pub fn derive_azbuf(input: TokenStream) -> TokenStream {
10    let DeriveInput {
11        ident,
12        generics,
13        data,
14        ..
15    } = parse_macro_input!(input);
16
17    let (impl_generics, ty_generics, where_clause) = generics.split_for_impl();
18
19    let writable = write::create_fn_azalea_write(&data);
20    let readable = read::create_fn_azalea_read(&data);
21    quote! {
22        #[automatically_derived]
23        impl #impl_generics azalea_buf::AzBuf for #ident #ty_generics #where_clause {
24            #writable
25            #readable
26        }
27    }
28    .into()
29}