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}