cido-macros 0.2.0

Macros for generating code that enables easier interfacing with cido
Documentation
#[derive(deluxe::ParseMetaItem)]
struct ImplArgs {
  keep: deluxe::Flag,
}

pub fn impls(
  args: proc_macro::TokenStream,
  input: proc_macro::TokenStream,
) -> proc_macro::TokenStream {
  let args = match deluxe::parse::<ImplArgs>(args) {
    Ok(i) => i,
    Err(e) => return e.into_compile_error().into(),
  };
  let item = match syn::parse::<syn::Item>(input) {
    Ok(item) => item,
    Err(e) => return e.into_compile_error().into(),
  };
  match item {
    syn::Item::Impl(mut i) => {
      for item in &mut i.items {
        match item {
          syn::ImplItem::Fn(f) => {
            if args.keep.is_set() {
              f.block = syn::parse2::<syn::Block>(quote::quote!({ unimplemented!() })).unwrap();
            }
          }
          _ => continue,
        }
      }
      quote::quote!(#[allow(unused)] #i).into()
    }
    i => quote::quote!(#i).into(),
  }
}