From 6b4d2a11537282947dc71a646c168ea1343d6a52 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 1 Aug 2026 09:24:12 +0100 Subject: Support Box in transient-0 --- .../test/java/org/zwobble/example/Transient0Tests.java | 15 +++++++++++++++ examples/14-transient-0/output/rust/src/gen/data.rs | 5 +++++ .../output/rust/src/gen/data/transient_0.rs | 10 ++++++++++ examples/14-transient-0/output/rust/src/lib.rs | 16 +++++++++++++++- examples/14-transient-0/src/data.hob | 4 ++++ 5 files changed, 49 insertions(+), 1 deletion(-) (limited to 'examples') diff --git a/examples/14-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java b/examples/14-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java index 8161920..6732f72 100644 --- a/examples/14-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java +++ b/examples/14-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java @@ -17,6 +17,7 @@ import org.junit.jupiter.api.Test; import org.zwobble.example.types.data.EnumWithVariants; import org.zwobble.example.types.data.StructSingleton; import org.zwobble.example.types.data.StructWithBool; +import org.zwobble.example.types.data.StructWithBox; import org.zwobble.example.types.data.StructWithDifferentSharedTypes; import org.zwobble.example.types.data.StructWithEnum; import org.zwobble.example.types.data.StructWithInt8; @@ -256,6 +257,20 @@ public class Transient0Tests { ); } + @Test + public void structWithBox() throws IOException { + var value = new StructWithBox( + new StructWithInt32(10, 25) + ); + + assertRoundTripEncoding( + "StructWithBox", + value, + HobgoblinTransient0Data::encodeStructWithBox, + HobgoblinTransient0Data::decodeStructWithBox + ); + } + @Test public void structWithListOfShared() throws IOException { var a = new StructWithInt32(10, 25); diff --git a/examples/14-transient-0/output/rust/src/gen/data.rs b/examples/14-transient-0/output/rust/src/gen/data.rs index 77bcbe8..d4847ec 100644 --- a/examples/14-transient-0/output/rust/src/gen/data.rs +++ b/examples/14-transient-0/output/rust/src/gen/data.rs @@ -116,6 +116,11 @@ pub struct StructWithSum { pub b: ::core::primitive::i32, } +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct StructWithBox { + pub inner: ::std::boxed::Box::, +} + #[derive(Clone, Debug, Hash, PartialEq)] pub struct StructWithListOfShared { pub inner: ::std::vec::Vec::<::std::sync::Arc::>, diff --git a/examples/14-transient-0/output/rust/src/gen/data/transient_0.rs b/examples/14-transient-0/output/rust/src/gen/data/transient_0.rs index f2bf149..0c8efd3 100644 --- a/examples/14-transient-0/output/rust/src/gen/data/transient_0.rs +++ b/examples/14-transient-0/output/rust/src/gen/data/transient_0.rs @@ -264,6 +264,16 @@ pub fn decode_struct_with_sum(reader: &mut impl std::io::Read, shared_values: &m ::std::io::Result::Ok(crate::data::StructWithSum { inner: inner, b: b }) } +pub fn encode_struct_with_box(value: &crate::data::StructWithBox, 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_struct_with_int_32((&value.inner).as_ref(), writer, shared_values)?; + ::std::io::Result::Ok(()) +} + +pub fn decode_struct_with_box(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + let inner = ::std::boxed::Box::new(crate::data::transient_0::decode_struct_with_int_32(reader, shared_values)?); + ::std::io::Result::Ok(crate::data::StructWithBox { inner: inner }) +} + pub fn encode_struct_with_list_of_shared(value: &crate::data::StructWithListOfShared, writer: &mut impl std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { { crate::transient_0::encode_int_64(&(((&value.inner).len()).try_into()).map_err(|error| ::std::io::Error::new(::std::io::ErrorKind::InvalidData, error))?, writer, shared_values)?; diff --git a/examples/14-transient-0/output/rust/src/lib.rs b/examples/14-transient-0/output/rust/src/lib.rs index df50cae..f0f6e24 100644 --- a/examples/14-transient-0/output/rust/src/lib.rs +++ b/examples/14-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, SumWithBoxedVariants, SumWithVariants, VariantOne, VariantTwo }; + use super::data::{EnumWithVariants, StructSingleton, StructWithBool, StructWithBox, StructWithDifferentSharedTypes, StructWithEnum, StructWithInt8, StructWithInt32, StructWithInt64, StructWithList, StructWithListOfShared, StructWithOption, StructWithSharedSumAndVariant, StructWithString, StructWithStruct, StructWithSum, SumWithBoxedVariants, SumWithVariants, VariantOne, VariantTwo }; #[test] fn struct_singleton() { @@ -228,6 +228,20 @@ mod test { ); } + #[test] + fn struct_with_box() { + let value = StructWithBox { + inner: Box::new(StructWithInt32 { a: 10, b: 25 }), + }; + + assert_round_trip_encoding( + "StructWithBox", + value, + super::data::transient_0::encode_struct_with_box, + super::data::transient_0::decode_struct_with_box, + ); + } + #[test] fn struct_with_list_of_shared() { let a = Arc::new(StructWithInt32 { a: 10, b: 25 }); diff --git a/examples/14-transient-0/src/data.hob b/examples/14-transient-0/src/data.hob index 0744b79..2bcc6be 100644 --- a/examples/14-transient-0/src/data.hob +++ b/examples/14-transient-0/src/data.hob @@ -76,6 +76,10 @@ struct StructWithSum { field b: Int32; } +struct StructWithBox { + field inner: Box[StructWithInt32]; +} + struct StructWithListOfShared { field inner: List[Shared[StructWithInt32]]; } -- cgit v1.2.3