neli_proc_macros/
derive_header.rs

1use proc_macro2::TokenStream as TokenStream2;
2use quote::quote;
3use syn::ItemStruct;
4
5use crate::shared::StructInfo;
6
7fn generate_header(mut i: StructInfo) -> TokenStream2 {
8    i.pop_field();
9
10    let (struct_name, generics, generics_without_bounds, _, field_types, _, _) = i.into_tuple();
11
12    quote! {
13        impl#generics neli::Header for #struct_name#generics_without_bounds {
14            fn header_size() -> usize {
15                #( <#field_types as neli::TypeSize>::type_size() )+*
16            }
17        }
18    }
19}
20
21pub fn impl_header_struct(is: ItemStruct) -> TokenStream2 {
22    let info = StructInfo::from_item_struct(is, None, "header_bound", false);
23    generate_header(info)
24}