summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/10-transient-0/src/data.hob10
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java29
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 -> {