From f189d982951f7f0e2c3560a20c0d1d8a2b6431d0 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 14 Jul 2026 19:49:24 +0100 Subject: Derive Debug and PartialEq for generated Rust types --- .../generators/rusttypes/RustTypesGenerator.java | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) (limited to 'src') 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 19f3365..7695bf4 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 @@ -92,6 +92,8 @@ public class RustTypesGenerator implements Generator { TypedEnumDefinitionNode enumDefinition, Context context ) { + var rustAttributes = List.of(DERIVE_ATTRIBUTE); + var rustEnumName = this.rustGenerator.generateTypeName(enumDefinition.name()); var rustVariants = enumDefinition.variants().stream() @@ -102,7 +104,7 @@ public class RustTypesGenerator implements Generator { .toList(); var rustEnum = new RustEnum( - List.of(), + rustAttributes, rustEnumName, rustVariants, enumDefinition.docComment() @@ -111,10 +113,17 @@ public class RustTypesGenerator implements Generator { return List.of(rustEnum); } + private static final RustOuterAttribute DERIVE_ATTRIBUTE = new RustOuterAttribute( + RustTypePath.of("derive"), + Optional.of("(Debug, PartialEq)") + ); + private List generateStructDefinition( TypedStructDefinitionNode structDefinition, Context context ) { + var rustAttributes = List.of(DERIVE_ATTRIBUTE); + var rustStructName = this.rustGenerator.generateTypeName(structDefinition.name()); var rustFields = structDefinition.fields().stream() @@ -124,7 +133,12 @@ public class RustTypesGenerator implements Generator { )) .toList(); - var rustStruct = new RustStructStruct(List.of(), rustStructName, rustFields, structDefinition.docComment()); + var rustStruct = new RustStructStruct( + rustAttributes, + rustStructName, + rustFields, + structDefinition.docComment() + ); return List.of(rustStruct); } @@ -133,6 +147,8 @@ public class RustTypesGenerator implements Generator { TypedSumDefinitionNode sumDefinition, Context context ) { + var rustAttributes = List.of(DERIVE_ATTRIBUTE); + var items = new ArrayList(); var rustEnumName = this.rustGenerator.generateTypeName(sumDefinition.name()); @@ -156,7 +172,7 @@ public class RustTypesGenerator implements Generator { .toList(); var rustEnum = new RustEnum( - List.of(), + rustAttributes, rustEnumName, rustVariants, sumDefinition.docComment() -- cgit v1.2.3