mvbitfield_macros/
lib.rs

1use syn::parse_macro_input;
2
3use crate::gen::bitfield_impl;
4
5mod ast;
6mod gen;
7mod pack;
8
9#[proc_macro]
10pub fn bitfield(tokens: proc_macro::TokenStream) -> proc_macro::TokenStream {
11    bitfield_impl(parse_macro_input!(tokens)).into()
12}
13
14#[cfg(test)]
15mod tests {
16    use quote::quote;
17
18    use super::bitfield_impl;
19
20    #[test]
21    fn success_zero_structs() {
22        let tokens = quote! { (some::path,) };
23
24        let _ = bitfield_impl(syn::parse2(tokens).unwrap());
25    }
26
27    #[test]
28    fn success_multiple_structs() {
29        let tokens = quote! {(
30            ::mvbitfield,
31
32            #[msb_first]
33            pub struct MyBitfield: 32 {
34                pub foo: 6,
35                pub flag: 1 as bool,
36                ..
37            }
38
39            #[lsb_first]
40            pub struct AnotherBitfield: 16 {
41                bar: 3,
42                qux: 13,
43            }
44        )};
45
46        let _ = bitfield_impl(syn::parse2(tokens).unwrap());
47    }
48}