use proc_macro::TokenStream as TokenStream1;
use quote::quote;
use syn::parse_macro_input;
mod bit_size;
mod bitenum;
mod bitfield;
#[proc_macro_attribute]
pub fn bitfield(args: TokenStream1, input: TokenStream1) -> TokenStream1 {
bitfield::bitfield(args, input)
}
#[proc_macro_attribute]
pub fn bitenum(args: TokenStream1, input: TokenStream1) -> TokenStream1 {
let mut config = bitenum::Config::default();
let config_parser = syn::meta::parser(|meta| config.parse(meta));
parse_macro_input!(args with config_parser);
let input = parse_macro_input!(input as syn::ItemEnum);
match bitenum::bitenum(config, &input) {
Ok(stream) => stream.into(),
Err(err) => {
let error = err.into_compile_error();
let input = bitenum::fallback_impl(&input);
quote!(#input #error).into()
}
}
}