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}