use crate::core::ir::ApiSurface;
use ahash::AHashMap;
use std::collections::HashSet;
pub(crate) fn build_collision_set(api: &ApiSurface) -> HashSet<String> {
let mut variant_counts: AHashMap<&str, usize> = AHashMap::new();
for en in &api.enums {
for v in &en.variants {
*variant_counts.entry(v.name.as_str()).or_insert(0) += 1;
}
}
for err in &api.errors {
for v in &err.variants {
*variant_counts.entry(v.name.as_str()).or_insert(0) += 1;
}
}
for ty in &api.types {
*variant_counts.entry(ty.name.as_str()).or_insert(0) += 1;
}
variant_counts
.into_iter()
.filter_map(|(n, c)| if c > 1 { Some(n.to_string()) } else { None })
.collect()
}
pub(crate) fn variant_constructor_name(
parent_type: &str,
variant_name: &str,
collisions: &std::collections::HashSet<String>,
) -> String {
if collisions.contains(variant_name) {
format!("{parent_type}{variant_name}")
} else {
variant_name.to_string()
}
}