use proc_macro2::{Span, TokenStream};
use quote::quote;
use syn::{Ident, ItemFn, ReturnType};
use super::analyze::SkipIf;
impl SkipIf {
pub(crate) fn codegen(&self, item: ItemFn) -> TokenStream {
let ItemFn {
attrs,
vis,
mut sig,
block,
} = item;
let mut skip = false;
for element in &self.required_elements {
if element.is_missing() {
skip = true;
break;
}
}
let expanded = if skip {
let ident_string = format!("{}_SKIPPED", sig.ident);
sig.ident = Ident::new(ident_string.as_str(), Span::mixed_site());
sig.output = ReturnType::Default;
quote! {
#(#attrs)*
#vis #sig {}
}
} else {
quote! {
#(#attrs)*
#vis #sig {
#block
}
}
};
expanded
}
}