From 6eb866fe831d85fbc5a492df711afcda26b2df6f Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 14 Aug 2026 11:07:46 +0100 Subject: Support generic structs in rust-types --- .../compiler/output/generators/rust/RustGenerator.java | 2 +- .../output/generators/rusttypes/RustTypesGenerator.java | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) (limited to 'src/main/java/org') diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rust/RustGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rust/RustGenerator.java index 089a854..fae9066 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rust/RustGenerator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rust/RustGenerator.java @@ -79,7 +79,7 @@ public class RustGenerator { } case TypeParam typeParam -> { - throw new UnsupportedOperationException("TODO"); + yield RustPath.of(this.generateTypeName(typeParam.name())); } }; } 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 2070ec3..a5c2118 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 @@ -7,7 +7,9 @@ import org.zwobble.hobgoblin.compiler.output.generators.rust.RustGenerator; import org.zwobble.hobgoblin.compiler.output.generators.rust.RustGeneratorConfig; import org.zwobble.hobgoblin.compiler.output.lang.rust.ast.*; import org.zwobble.hobgoblin.compiler.typechecker.TypesInfo; +import org.zwobble.hobgoblin.compiler.types.SimpleStructType; import org.zwobble.hobgoblin.compiler.types.Type; +import org.zwobble.hobgoblin.compiler.types.TypeOrConstructor; import org.zwobble.json5.reader.Json5ObjectReader; import java.io.IOException; @@ -127,6 +129,19 @@ public class RustTypesGenerator implements Generator { var rustStructName = this.rustGenerator.generateTypeName(structDefinition.name()); + var rustTypeParams = switch (structDefinition.typeOrConstructor()) { + case TypeOrConstructor.Constructor constructor -> + constructor.value().params().stream() + .map(typeParam -> new RustTypeParam( + this.rustGenerator.generateTypeName(typeParam.name()), + List.of() + )) + .toList(); + + case TypeOrConstructor.Type _ -> + List.of(); + }; + var rustFields = structDefinition.fields().map( fields -> fields.stream() .map(field -> new RustStructField( @@ -139,7 +154,7 @@ public class RustTypesGenerator implements Generator { var rustStruct = new RustStructStruct( rustAttributes, rustStructName, - List.of(), + rustTypeParams, rustFields, structDefinition.docComment() ); -- cgit v1.2.3