smb_dtyp_derive/
lib.rs

1use proc_macro::TokenStream;
2
3/// A helper macro that invokes `modular_bitfield` and `binrw` derives for bitfield structs.
4/// Those must be installed as dependencies in the crate where this macro is used.
5///
6/// Adds derives for `Debug`, `Default`, `Clone`, `Copy`, `PartialEq`, and `Eq`.
7#[proc_macro_attribute]
8pub fn mbitfield(_attr: TokenStream, input: TokenStream) -> TokenStream {
9    let input = syn::parse_macro_input!(input as syn::ItemStruct);
10    quote::quote! {
11        #[::modular_bitfield::bitfield]
12        #[derive(::binrw::BinWrite, ::binrw::BinRead)]
13        #[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
14        #[bw(map = |&x| Self::into_bytes(x))]
15        #[br(map = Self::from_bytes)]
16        #input
17    }
18    .into()
19}