use crate::core::ir::{ParamDef, TypeRef};
use ahash::AHashSet;
pub fn has_named_params(params: &[ParamDef], opaque_types: &AHashSet<String>) -> bool {
params.iter().any(|p| match &p.ty {
TypeRef::Named(name) if !opaque_types.contains(name.as_str()) => true,
TypeRef::Vec(inner) => {
matches!(inner.as_ref(), TypeRef::Named(name) if !opaque_types.contains(name.as_str()))
|| (matches!(inner.as_ref(), TypeRef::String | TypeRef::Char) && p.is_ref)
|| (matches!(inner.as_ref(), TypeRef::String) && p.sanitized && p.original_type.is_some())
}
_ => false,
})
}
pub fn is_simple_non_opaque_param(ty: &TypeRef) -> bool {
match ty {
TypeRef::Primitive(_)
| TypeRef::String
| TypeRef::Char
| TypeRef::Bytes
| TypeRef::Path
| TypeRef::Unit
| TypeRef::Duration
| TypeRef::Json => true,
TypeRef::Optional(inner) => is_simple_non_opaque_param(inner),
_ => false,
}
}