use crate::core::ir::{ApiSurface, EnumDef};
use ahash::AHashMap;
#[derive(Clone, Debug)]
pub struct DefaultEnumVariant {
pub variant_name: String,
pub is_zero_field: bool,
}
pub fn default_variant_name(enum_def: &EnumDef) -> Option<String> {
enum_def
.variants
.iter()
.find(|v| v.is_default)
.or_else(|| enum_def.variants.first())
.map(|v| v.name.clone())
}
pub fn enum_default_variants_map(api: &ApiSurface) -> AHashMap<String, String> {
api.enums
.iter()
.filter_map(|enum_def| default_variant_name(enum_def).map(|variant_name| (enum_def.name.clone(), variant_name)))
.collect()
}
pub fn enum_default_variants_map_with_metadata(api: &ApiSurface) -> AHashMap<String, DefaultEnumVariant> {
api.enums
.iter()
.filter_map(|enum_def| {
let default_variant = enum_def
.variants
.iter()
.find(|v| v.is_default)
.or_else(|| enum_def.variants.first())?;
Some((
enum_def.name.clone(),
DefaultEnumVariant {
variant_name: default_variant.name.clone(),
is_zero_field: default_variant.fields.is_empty(),
},
))
})
.collect()
}