aboutsummaryrefslogtreecommitdiff
path: root/azalea-buf/azalea-buf-macros/src/lib.rs
blob: e71daf112e2ff189202409d02bd00d3f5a9a3932 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
mod read;
mod write;

use proc_macro::TokenStream;
use quote::quote;
use syn::{DeriveInput, parse_macro_input};

#[proc_macro_derive(AzBuf, attributes(var, limit))]
pub fn derive_azbuf(input: TokenStream) -> TokenStream {
    let DeriveInput {
        ident,
        generics,
        data,
        ..
    } = parse_macro_input!(input);

    let (impl_generics, ty_generics, where_clause) = generics.split_for_impl();

    let writable = write::create_fn_azalea_write(&data);
    let readable = read::create_fn_azalea_read(&data);
    quote! {
        impl #impl_generics azalea_buf::AzBuf for #ident #ty_generics #where_clause {
            #writable
            #readable
        }
    }
    .into()
}