mod analyse;
mod config;
mod expand;
mod field_config;
mod field_info;
mod params;
use self::{
config::Config,
params::ParamArgs,
};
use core::convert::TryFrom;
use proc_macro2::TokenStream as TokenStream2;
use syn::{
self,
parse::Result,
};
pub fn analyse_and_expand(args: TokenStream2, input: TokenStream2) -> TokenStream2 {
match analyse_and_expand_or_error(args, input) {
Ok(output) => output,
Err(err) => err.to_compile_error(),
}
}
fn analyse_and_expand_or_error(
args: TokenStream2,
input: TokenStream2,
) -> Result<TokenStream2> {
let input = syn::parse::<syn::ItemStruct>(input.into())?;
let params = syn::parse::<ParamArgs>(args.into())?;
let mut config = Config::default();
config.feed_params(params)?;
let bitfield = BitfieldStruct::try_from((&mut config, input))?;
Ok(bitfield.expand(&config))
}
struct BitfieldStruct {
item_struct: syn::ItemStruct,
}