diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-08-14 11:07:46 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-08-14 11:07:46 +0100 |
| commit | 6eb866fe831d85fbc5a492df711afcda26b2df6f (patch) | |
| tree | ef43539883b91a238f1826ce5183e997fdfc4b85 /src | |
| parent | 00cfa7a56b31f0b629a54a77e1934d25471f8156 (diff) | |
Support generic structs in rust-typesmain
Diffstat (limited to 'src')
2 files changed, 17 insertions, 2 deletions
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<SimpleStructType> constructor -> + constructor.value().params().stream() + .map(typeParam -> new RustTypeParam( + this.rustGenerator.generateTypeName(typeParam.name()), + List.of() + )) + .toList(); + + case TypeOrConstructor.Type<SimpleStructType> _ -> + List.<RustTypeParam>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() ); |
