summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-07-02 10:07:12 +0100
committerMichael Williamson <mike@zwobble.org>2026-07-02 10:07:12 +0100
commit0568d7e77dbe004864e19a75a2216e233fbfad2b (patch)
tree3e2693318e7018e12adf7ab56c5877be6214477c /src/main/java
parent5447ee9766b101d20fdb1745b6f57411d6896264 (diff)
Support translating enums into Rust types
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java29
1 files changed, 27 insertions, 2 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java
index e681a3e..b71c9ed 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java
@@ -80,7 +80,7 @@ public class RustTypesGenerator implements Generator {
) {
return switch (statement) {
case TypedEnumDefinitionNode enumDefinition -> {
- yield List.of();
+ yield generateEnumDefinition(enumDefinition, context);
}
case TypedNativeTypeDefinitionNode nativeTypeDefinition -> {
@@ -97,6 +97,28 @@ public class RustTypesGenerator implements Generator {
};
}
+ private List<RustItem> generateEnumDefinition(
+ TypedEnumDefinitionNode enumDefinition,
+ Context context
+ ) {
+ var rustEnumName = generateTypeName(enumDefinition.name());
+
+ var rustVariants = enumDefinition.variants().stream()
+ .map(variant -> new RustEnumVariant(
+ generateVariantName(variant.name()),
+ new RustEnumVariantNoFields()
+ ))
+ .toList();
+
+ var rustEnum = new RustEnum(
+ rustEnumName,
+ rustVariants,
+ enumDefinition.docComment()
+ );
+
+ return List.of(rustEnum);
+ }
+
private List<RustItem> generateStructDefinition(
TypedStructDefinitionNode structDefinition,
Context context
@@ -216,13 +238,16 @@ public class RustTypesGenerator implements Generator {
return new RustIdentifier(Casing.lowerCamelCaseToSnakeCase(part));
}
+ private RustIdentifier generateVariantName(String enumVariantName) {
+ return generateTypeName(Casing.lowerCamelCaseToUpperCamelCase(enumVariantName));
+ }
+
private RustIdentifier generateVariantName(Type type) {
if (type instanceof StructType structType) {
return generateTypeName(structType.name());
} else {
throw new UnsupportedOperationException("TODO");
}
-
}
private static class Context {