use std::collections::HashSet;
use crate::core::config::TraitBridgeConfig;
use crate::core::ir::{ApiSurface, TypeRef};
use super::classes;
pub(super) fn generated_default_types<'a>(
api: &'a ApiSurface,
default_types: &HashSet<&str>,
map_type: &dyn Fn(&TypeRef) -> String,
trait_bridges: &[TraitBridgeConfig],
) -> HashSet<&'a str> {
api.types
.iter()
.filter(|typ| !typ.is_trait && !typ.is_opaque)
.filter(|typ| {
typ.has_default
|| !typ.fields.is_empty()
&& classes::gen_struct_default_impl_explicit(typ, map_type, trait_bridges, default_types).is_some()
})
.map(|typ| typ.name.as_str())
.chain(
api.enums
.iter()
.filter(|enum_def| enum_def.has_default || enum_def.variants.iter().all(|v| v.fields.is_empty()))
.map(|enum_def| enum_def.name.as_str()),
)
.collect()
}