diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-07-05 11:32:05 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-07-05 11:32:05 +0100 |
| commit | ca6307a275a2ab20c2606cea9a916e22225599dd (patch) | |
| tree | 65c8c5c583e1990dc3eda357d7c63818e38e31cd | |
| parent | 69e672a33dbdeb5882072dbe407ac0138bc58ab8 (diff) | |
Support nested structs in transient-0
| -rw-r--r-- | examples/10-transient-0/src/data.hob | 10 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java | 29 |
2 files changed, 37 insertions, 2 deletions
diff --git a/examples/10-transient-0/src/data.hob b/examples/10-transient-0/src/data.hob index e447f21..f3343f2 100644 --- a/examples/10-transient-0/src/data.hob +++ b/examples/10-transient-0/src/data.hob @@ -7,3 +7,13 @@ struct StructWithInt64 { field a: Int64; field b: Int64; } + +struct OuterStruct { + field inner: InnerStruct; + field c: Int32; +} + +struct InnerStruct { + field a: Int32; + field b: Int32; +} diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java index 1695da7..a8bacbf 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java @@ -95,6 +95,13 @@ public class JavaTransient0Generator implements Generator { ); } + private JavaTypeRef generateTransient0TypeRef(NamespaceName namespaceName) { + return JavaTypeRef.topLevel( + this.javaGenerator.namespaceToJavaPackageName(namespaceName), + generateTransient0ClassName(namespaceName) + ); + } + private JavaIdentifier generateTransient0ClassName(NamespaceName namespaceName) { var namespaceShortName = namespaceName.shortName(); return this.javaGenerator.generateTypeName( @@ -203,7 +210,15 @@ public class JavaTransient0Generator implements Generator { } case StructType structType -> { - throw new UnsupportedOperationException("TODO"); + yield Stream.of( + new JavaExpressionStatement( + new JavaStaticMethodCall( + generateTransient0TypeRef(structType.namespaceName()), + encodeMethodName(structType), + List.of(value, new JavaRef(OUTPUT_STREAM_NAME)) + ) + ) + ); } case SumType sumType -> { @@ -241,7 +256,17 @@ public class JavaTransient0Generator implements Generator { } case StructType structType -> { - throw new UnsupportedOperationException("TODO"); + yield Stream.of( + new JavaLocalVariableDeclaration( + Optional.empty(), + target, + new JavaStaticMethodCall( + generateTransient0TypeRef(structType.namespaceName()), + decodeMethodName(structType), + List.of(new JavaRef(INPUT_STREAM_NAME)) + ) + ) + ); } case SumType sumType -> { |
