use syn::{
FnArg,
ImplItem,
TraitItem,
};
pub fn sig_has_receiver(sig: &syn::Signature) -> bool {
sig.inputs.iter().any(|arg| matches!(arg, FnArg::Receiver(_)))
}
pub fn sig_has_non_receiver_parameters(sig: &syn::Signature) -> bool {
sig.inputs.iter().any(|arg| matches!(arg, FnArg::Typed(_)))
}
pub fn has_receiver(method: &syn::ImplItemFn) -> bool {
sig_has_receiver(&method.sig)
}
pub fn impl_has_receiver_methods(item_impl: &syn::ItemImpl) -> bool {
item_impl
.items
.iter()
.any(|item| if let ImplItem::Fn(method) = item { has_receiver(method) } else { false })
}
pub fn trait_has_receiver_methods(item_trait: &syn::ItemTrait) -> bool {
item_trait
.items
.iter()
.any(|item| matches!(item, TraitItem::Fn(method) if sig_has_receiver(&method.sig)))
}