use prebindgen_registry::Conversions;
use super::*;
pub(crate) enum TypeKind<'r, 'c> {
Handle,
Enum,
Sum,
DataStruct {
st: &'r prebindgen_registry::flat::Struct,
cfg: Option<&'c TypeConfig>,
},
Other,
}
impl TypeConfig {
pub(crate) fn special_decl(&self) -> bool {
!matches!(self.kind, DeclaredKind::Data)
}
}
impl Declarations {
pub(crate) fn type_kind<'r, 'c>(
&'c self,
registry: &'r impl Conversions<KotlinMeta>,
bare: &TypeKey,
) -> TypeKind<'r, 'c> {
let cfg = self.types.get(bare);
if let Some(c) = cfg {
match c.kind {
DeclaredKind::Ptr(_) => return TypeKind::Handle,
DeclaredKind::Enum(_) => return TypeKind::Enum,
DeclaredKind::Sealed(_) => return TypeKind::Sum,
DeclaredKind::Data => {}
}
}
if let Some(name) = bare.ident() {
if let Some(st) = registry.flat().struct_type(&name) {
return TypeKind::DataStruct { st, cfg };
}
}
TypeKind::Other
}
}