diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-07-02 10:07:12 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-07-02 10:07:12 +0100 |
| commit | 0568d7e77dbe004864e19a75a2216e233fbfad2b (patch) | |
| tree | 3e2693318e7018e12adf7ab56c5877be6214477c /src | |
| parent | 5447ee9766b101d20fdb1745b6f57411d6896264 (diff) | |
Support translating enums into Rust types
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java | 29 |
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 { |
