From ca6307a275a2ab20c2606cea9a916e22225599dd Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 5 Jul 2026 11:32:05 +0100 Subject: Support nested structs in transient-0 --- .../javatransient0/JavaTransient0Generator.java | 29 ++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'src/main') 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 -> { -- cgit v1.2.3