use proc_macro::TokenStream;

mod args;
mod generator;
mod lifetime;

#[proc_macro_attribute]
pub fn generator(attr: TokenStream, mut item: TokenStream) -> TokenStream {
    match generator::expand(attr.into(), item.clone().into()) {
        Ok(tokens) => tokens.into(),
        Err(e) => {
            let tokens: TokenStream = e.into_compile_error().into();
            item.extend(tokens);
            item
        }
    }
}
