summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/11-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java12
-rw-r--r--examples/11-transient-0/output/rust/src/gen/data.rs5
-rw-r--r--examples/11-transient-0/output/rust/src/gen/data/transient_0.rs10
-rw-r--r--examples/11-transient-0/src/data.hob4
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java4
5 files changed, 33 insertions, 2 deletions
diff --git a/examples/11-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java b/examples/11-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java
index 6369f93..3393973 100644
--- a/examples/11-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java
+++ b/examples/11-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java
@@ -17,6 +17,7 @@ import org.zwobble.example.types.data.StructWithInt32;
import org.zwobble.example.types.data.StructWithInt64;
import org.zwobble.example.types.data.StructWithList;
import org.zwobble.example.types.data.StructWithOption;
+import org.zwobble.example.types.data.StructWithShared;
import org.zwobble.example.types.data.StructWithString;
import org.zwobble.example.types.data.StructWithStruct;
import org.zwobble.example.types.data.StructWithSum;
@@ -189,6 +190,17 @@ public class Transient0Tests {
);
}
+ @Test
+ public void structWithShared() throws IOException {
+ var value = new StructWithShared(new StructWithInt32(10, 25));
+
+ assertRoundTripEncoding(
+ value,
+ HobgoblinTransient0Data::encodeStructWithShared,
+ HobgoblinTransient0Data::decodeStructWithShared
+ );
+ }
+
private <T> void assertRoundTripEncoding(
T value,
Encoder<T> encoder,
diff --git a/examples/11-transient-0/output/rust/src/gen/data.rs b/examples/11-transient-0/output/rust/src/gen/data.rs
index 0ea6c0f..df221bb 100644
--- a/examples/11-transient-0/output/rust/src/gen/data.rs
+++ b/examples/11-transient-0/output/rust/src/gen/data.rs
@@ -88,3 +88,8 @@ pub struct StructWithSum {
pub inner: crate::data::SumWithVariants,
pub b: ::core::primitive::i32,
}
+
+#[derive(Debug, PartialEq)]
+pub struct StructWithShared {
+ pub inner: ::std::sync::Arc::<crate::data::StructWithInt32>,
+}
diff --git a/examples/11-transient-0/output/rust/src/gen/data/transient_0.rs b/examples/11-transient-0/output/rust/src/gen/data/transient_0.rs
index 82fb5f7..12f69e8 100644
--- a/examples/11-transient-0/output/rust/src/gen/data/transient_0.rs
+++ b/examples/11-transient-0/output/rust/src/gen/data/transient_0.rs
@@ -221,3 +221,13 @@ pub fn decode_struct_with_sum(reader: &mut impl std::io::Read) -> ::std::io::Res
let b = crate::transient_0::decode_int_32(reader)?;
std::io::Result::Ok(crate::data::StructWithSum { inner: inner, b: b })
}
+
+pub fn encode_struct_with_shared(value: &crate::data::StructWithShared, writer: &mut impl std::io::Write) -> ::std::io::Result::<()> {
+ todo!();
+ ::std::io::Result::Ok(())
+}
+
+pub fn decode_struct_with_shared(reader: &mut impl std::io::Read) -> ::std::io::Result::<crate::data::StructWithShared> {
+ let inner = todo!();
+ std::io::Result::Ok(crate::data::StructWithShared { inner: inner })
+}
diff --git a/examples/11-transient-0/src/data.hob b/examples/11-transient-0/src/data.hob
index bbfd882..57fe640 100644
--- a/examples/11-transient-0/src/data.hob
+++ b/examples/11-transient-0/src/data.hob
@@ -61,3 +61,7 @@ struct StructWithSum {
field inner: SumWithVariants;
field b: Int32;
}
+
+struct StructWithShared {
+ field inner: Shared[StructWithInt32];
+}
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 f0fe329..ce4d3f1 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
@@ -577,7 +577,7 @@ public class JavaTransient0Generator implements Generator {
}
private List<JavaBlockStatement> generateEncode(JavaExpression value, Type type) {
- return switch (type) {
+ return switch (this.javaGenerator.collapseType(type)) {
case ConstructedNativeType constructedNativeType -> {
if (constructedNativeType.constructor().equals(NativeTypes.LIST)) {
yield generateEncodeList(value, constructedNativeType.args().getFirst());
@@ -645,7 +645,7 @@ public class JavaTransient0Generator implements Generator {
}
private List<JavaBlockStatement> generateDecode(JavaIdentifier target, Type type) {
- return switch (type) {
+ return switch (this.javaGenerator.collapseType(type)) {
case ConstructedNativeType constructedNativeType -> {
if (constructedNativeType.constructor().equals(NativeTypes.LIST)) {
yield generateDecodeList(target, constructedNativeType.args().getFirst());