diff options
Diffstat (limited to 'examples/13-transient-0/output/rust')
| -rw-r--r-- | examples/13-transient-0/output/rust/src/gen/data.rs | 18 | ||||
| -rw-r--r-- | examples/13-transient-0/output/rust/src/gen/data/transient_0.rs | 22 | ||||
| -rw-r--r-- | examples/13-transient-0/output/rust/src/lib.rs | 19 |
3 files changed, 58 insertions, 1 deletions
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 }), |
