use std::collections::{HashMap, HashSet};
use crate::e2e::field_access::FieldResolver;
pub(super) struct EnumLowering {
pub(super) sealed_display_type: Option<String>,
pub(super) is_sealed_display_field: bool,
pub(super) field_is_enum: bool,
}
pub(super) fn classify_enum_lowering(
field: Option<&str>,
field_resolver: &FieldResolver,
enum_fields: &HashSet<String>,
assert_enum_types: &HashMap<String, String>,
) -> EnumLowering {
let sealed_display_type: Option<String> = field.and_then(|f| {
let resolved = field_resolver.resolve(f);
assert_enum_types
.get(f)
.or_else(|| assert_enum_types.get(resolved))
.cloned()
});
let is_sealed_display_field = sealed_display_type.is_some();
let field_is_enum = field.is_some_and(|f| {
let resolved = field_resolver.resolve(f);
let in_enum_fields = enum_fields.get(f).is_some()
|| enum_fields.get(resolved).is_some()
|| field_resolver.is_enum(f)
|| field_resolver.is_enum(resolved);
let emits_get_value = field_resolver
.java_enum_emits_get_value(f)
.or_else(|| field_resolver.java_enum_emits_get_value(resolved))
.unwrap_or(true);
in_enum_fields && !is_sealed_display_field && emits_get_value
});
EnumLowering {
sealed_display_type,
is_sealed_display_field,
field_is_enum,
}
}