From 13ddee33304f55788615eb3e330fd07d37093909 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 8 Aug 2026 17:48:37 +0100 Subject: Add use of native type to transient-0 example --- examples/15-transient-0/output/rust/src/data.rs | 30 ++++++++++++++++++++++ .../15-transient-0/output/rust/src/gen/data.rs | 5 ++++ .../output/rust/src/gen/data/transient_0.rs | 10 ++++++++ examples/15-transient-0/output/rust/src/lib.rs | 16 +++++++++++- 4 files changed, 60 insertions(+), 1 deletion(-) (limited to 'examples/15-transient-0/output/rust') diff --git a/examples/15-transient-0/output/rust/src/data.rs b/examples/15-transient-0/output/rust/src/data.rs index 7a0c4fa..6078fd0 100644 --- a/examples/15-transient-0/output/rust/src/data.rs +++ b/examples/15-transient-0/output/rust/src/data.rs @@ -1,5 +1,35 @@ include!("./gen/data.rs"); +#[derive(Clone, Debug, Hash, PartialEq)] +pub struct Native { + pub a: i32, + pub b: i32, +} + pub mod transient_0 { + use ::std::any::Any; + use ::std::sync::Arc; + use ::std::vec::Vec; + use super::Native; + include!("./gen/data/transient_0.rs"); + + pub fn encode_native( + value: &Native, + writer: &mut impl std::io::Write, + shared_values: &mut ::std::collections::HashMap::, + ) -> std::io::Result<()> { + crate::transient_0::encode_int_32(&value.a, writer, shared_values)?; + crate::transient_0::encode_int_32(&value.b, writer, shared_values)?; + Ok(()) + } + + pub fn decode_native( + reader: &mut impl std::io::Read, + shared_values: &mut Vec>, + ) -> std::io::Result { + let a = crate::transient_0::decode_int_32(reader, shared_values)?; + let b = crate::transient_0::decode_int_32(reader, shared_values)?; + Ok(Native { a, b }) + } } diff --git a/examples/15-transient-0/output/rust/src/gen/data.rs b/examples/15-transient-0/output/rust/src/gen/data.rs index d4847ec..745bc9d 100644 --- a/examples/15-transient-0/output/rust/src/gen/data.rs +++ b/examples/15-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 StructWithNative { + pub a: crate::data::Native, +} + #[derive(Clone, Debug, Hash, PartialEq)] pub struct StructWithBox { pub inner: ::std::boxed::Box::, diff --git a/examples/15-transient-0/output/rust/src/gen/data/transient_0.rs b/examples/15-transient-0/output/rust/src/gen/data/transient_0.rs index f802163..5ef4811 100644 --- a/examples/15-transient-0/output/rust/src/gen/data/transient_0.rs +++ b/examples/15-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_native(value: &crate::data::StructWithNative, 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_native(&value.a, writer, shared_values)?; + ::std::io::Result::Ok(()) +} + +pub fn decode_struct_with_native(reader: &mut impl std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::>) -> ::std::io::Result:: { + let a = crate::data::transient_0::decode_native(reader, shared_values)?; + ::std::io::Result::Ok(crate::data::StructWithNative { a: a }) +} + 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(()) diff --git a/examples/15-transient-0/output/rust/src/lib.rs b/examples/15-transient-0/output/rust/src/lib.rs index f0f6e24..22ecdb4 100644 --- a/examples/15-transient-0/output/rust/src/lib.rs +++ b/examples/15-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, StructWithBox, StructWithDifferentSharedTypes, StructWithEnum, StructWithInt8, StructWithInt32, StructWithInt64, StructWithList, StructWithListOfShared, StructWithOption, StructWithSharedSumAndVariant, StructWithString, StructWithStruct, StructWithSum, SumWithBoxedVariants, SumWithVariants, VariantOne, VariantTwo }; + use super::data::{EnumWithVariants, Native, StructSingleton, StructWithBool, StructWithBox, StructWithDifferentSharedTypes, StructWithEnum, StructWithInt8, StructWithInt32, StructWithInt64, StructWithList, StructWithListOfShared, StructWithNative, StructWithOption, StructWithSharedSumAndVariant, StructWithString, StructWithStruct, StructWithSum, SumWithBoxedVariants, SumWithVariants, VariantOne, VariantTwo }; #[test] fn struct_singleton() { @@ -228,6 +228,20 @@ mod test { ); } + #[test] + fn struct_with_native() { + let value = StructWithNative { + a: Native { a: 10, b: 25 }, + }; + + assert_round_trip_encoding( + "StructWithNative", + value, + super::data::transient_0::encode_struct_with_native, + super::data::transient_0::decode_struct_with_native, + ); + } + #[test] fn struct_with_box() { let value = StructWithBox { -- cgit v1.2.3