#[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(),
}
}