summaryrefslogtreecommitdiff
path: root/examples/13-transient-0
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-07-31 15:06:36 +0100
committerMichael Williamson <mike@zwobble.org>2026-07-31 15:06:36 +0100
commit904d7f9db65fa5542cdd44b8dd360c271a931cc6 (patch)
treea34aacccbf60af14f092d212d875d51560e2734d /examples/13-transient-0
parent0a2349963e03a98c1fc3682cdd3cd70c3290011d (diff)
Handle boxed variants in rust-transient-0
Diffstat (limited to 'examples/13-transient-0')
-rw-r--r--examples/13-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java17
-rw-r--r--examples/13-transient-0/output/rust/src/gen/data.rs18
-rw-r--r--examples/13-transient-0/output/rust/src/gen/data/transient_0.rs22
-rw-r--r--examples/13-transient-0/output/rust/src/lib.rs19
-rw-r--r--examples/13-transient-0/src/data.hob5
5 files changed, 80 insertions, 1 deletions
diff --git a/examples/13-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java b/examples/13-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java
index c439235..8161920 100644
--- a/examples/13-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java
+++ b/examples/13-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java
@@ -225,6 +225,23 @@ public class Transient0Tests {
}
@Test
+ public void sumWithBoxedVariants() throws IOException {
+ assertRoundTripEncoding(
+ "SumWithBoxedVariants_VariantOne",
+ new VariantOne(10),
+ HobgoblinTransient0Data::encodeSumWithBoxedVariants,
+ HobgoblinTransient0Data::decodeSumWithBoxedVariants
+ );
+
+ assertRoundTripEncoding(
+ "SumWithBoxedVariants_VariantTwo",
+ new VariantTwo(25),
+ HobgoblinTransient0Data::encodeSumWithBoxedVariants,
+ HobgoblinTransient0Data::decodeSumWithBoxedVariants
+ );
+ }
+
+ @Test
public void structWithSum() throws IOException {
var value = new StructWithSum(
new VariantTwo(25),
diff --git a/examples/13-transient-0/output/rust/src/gen/data.rs b/examples/13-transient-0/output/rust/src/gen/data.rs
index 50a0673..77bcbe8 100644
--- a/examples/13-transient-0/output/rust/src/gen/data.rs
+++ b/examples/13-transient-0/output/rust/src/gen/data.rs
@@ -93,6 +93,24 @@ pub struct VariantTwo {
}
#[derive(Clone, Debug, Hash, PartialEq)]
+pub enum SumWithBoxedVariants {
+ VariantOne(::std::boxed::Box::<crate::data::VariantOne>),
+ VariantTwo(::std::boxed::Box::<crate::data::VariantTwo>),
+}
+
+impl ::std::convert::From::<crate::data::VariantOne> for crate::data::SumWithBoxedVariants {
+ fn from(value: crate::data::VariantOne) -> Self {
+ Self::VariantOne(::std::boxed::Box::new(value))
+ }
+}
+
+impl ::std::convert::From::<crate::data::VariantTwo> for crate::data::SumWithBoxedVariants {
+ fn from(value: crate::data::VariantTwo) -> Self {
+ Self::VariantTwo(::std::boxed::Box::new(value))
+ }
+}
+
+#[derive(Clone, Debug, Hash, PartialEq)]
pub struct StructWithSum {
pub inner: crate::data::SumWithVariants,
pub b: ::core::primitive::i32,
diff --git a/examples/13-transient-0/output/rust/src/gen/data/transient_0.rs b/examples/13-transient-0/output/rust/src/gen/data/transient_0.rs
index 8bf68cb..f2bf149 100644
--- a/examples/13-transient-0/output/rust/src/gen/data/transient_0.rs
+++ b/examples/13-transient-0/output/rust/src/gen/data/transient_0.rs
@@ -230,6 +230,28 @@ pub fn decode_variant_two(reader: &mut impl std::io::Read, shared_values: &mut :
::std::io::Result::Ok(crate::data::VariantTwo { a: a })
}
+pub fn encode_sum_with_boxed_variants(value: &crate::data::SumWithBoxedVariants, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> {
+ match value {
+ crate::data::SumWithBoxedVariants::VariantOne(value) => {
+ crate::transient_0::encode_int_32(&0, writer, shared_values)?;
+ crate::data::transient_0::encode_variant_one(value, writer, shared_values)?;
+ },
+ crate::data::SumWithBoxedVariants::VariantTwo(value) => {
+ crate::transient_0::encode_int_32(&1, writer, shared_values)?;
+ crate::data::transient_0::encode_variant_two(value, writer, shared_values)?;
+ },
+ };
+ ::std::io::Result::Ok(())
+}
+
+pub fn decode_sum_with_boxed_variants(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::<dyn ::std::any::Any + ::std::marker::Sync + ::std::marker::Send>>) -> ::std::io::Result::<crate::data::SumWithBoxedVariants> {
+ ::std::io::Result::Ok(match &crate::transient_0::decode_int_32(reader, shared_values)? {
+ 0 => crate::data::SumWithBoxedVariants::VariantOne(::std::boxed::Box::new(crate::data::transient_0::decode_variant_one(reader, shared_values)?)),
+ 1 => crate::data::SumWithBoxedVariants::VariantTwo(::std::boxed::Box::new(crate::data::transient_0::decode_variant_two(reader, shared_values)?)),
+ _ => todo!(),
+ })
+}
+
pub fn encode_struct_with_sum(value: &crate::data::StructWithSum, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> {
crate::data::transient_0::encode_sum_with_variants(&value.inner, writer, shared_values)?;
crate::transient_0::encode_int_32(&value.b, writer, shared_values)?;
diff --git a/examples/13-transient-0/output/rust/src/lib.rs b/examples/13-transient-0/output/rust/src/lib.rs
index b858f24..df50cae 100644
--- a/examples/13-transient-0/output/rust/src/lib.rs
+++ b/examples/13-transient-0/output/rust/src/lib.rs
@@ -8,7 +8,7 @@ mod test {
use std::path::PathBuf;
use std::sync::Arc;
use std::collections::HashMap;
- use super::data::{EnumWithVariants, StructSingleton, StructWithBool, StructWithDifferentSharedTypes, StructWithEnum, StructWithInt8, StructWithInt32, StructWithInt64, StructWithList, StructWithListOfShared, StructWithOption, StructWithSharedSumAndVariant, StructWithString, StructWithStruct, StructWithSum, SumWithVariants, VariantOne, VariantTwo };
+ use super::data::{EnumWithVariants, StructSingleton, StructWithBool, StructWithDifferentSharedTypes, StructWithEnum, StructWithInt8, StructWithInt32, StructWithInt64, StructWithList, StructWithListOfShared, StructWithOption, StructWithSharedSumAndVariant, StructWithString, StructWithStruct, StructWithSum, SumWithBoxedVariants, SumWithVariants, VariantOne, VariantTwo };
#[test]
fn struct_singleton() {
@@ -197,6 +197,23 @@ mod test {
}
#[test]
+ fn sum_with_boxed_variants() {
+ assert_round_trip_encoding(
+ "SumWithBoxedVariants_VariantOne",
+ SumWithBoxedVariants::VariantOne(Box::new(VariantOne { a: 10 })),
+ super::data::transient_0::encode_sum_with_boxed_variants,
+ super::data::transient_0::decode_sum_with_boxed_variants,
+ );
+
+ assert_round_trip_encoding(
+ "SumWithBoxedVariants_VariantTwo",
+ SumWithBoxedVariants::VariantTwo(Box::new(VariantTwo { a: 25 })),
+ super::data::transient_0::encode_sum_with_boxed_variants,
+ super::data::transient_0::decode_sum_with_boxed_variants,
+ );
+ }
+
+ #[test]
fn struct_with_sum() {
let value = StructWithSum {
inner: SumWithVariants::VariantTwo(VariantTwo { a: 25 }),
diff --git a/examples/13-transient-0/src/data.hob b/examples/13-transient-0/src/data.hob
index 39a55c9..0744b79 100644
--- a/examples/13-transient-0/src/data.hob
+++ b/examples/13-transient-0/src/data.hob
@@ -66,6 +66,11 @@ struct VariantTwo {
field a: Int64;
}
+sum SumWithBoxedVariants {
+ variant VariantOne box;
+ variant VariantTwo box;
+}
+
struct StructWithSum {
field inner: SumWithVariants;
field b: Int32;