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}