From 104245a9b01c379cca76c3114702415d7d296563 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 19 Jul 2026 17:54:59 +0100 Subject: Support enums in rust-transient-0 --- .../output/rust/src/gen/data/transient_0.rs | 18 +++++++++++++++++ examples/10-transient-0/output/rust/src/lib.rs | 23 +++++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) (limited to 'examples/10-transient-0/output/rust/src') diff --git a/examples/10-transient-0/output/rust/src/gen/data/transient_0.rs b/examples/10-transient-0/output/rust/src/gen/data/transient_0.rs index c5bb458..fbfc82d 100644 --- a/examples/10-transient-0/output/rust/src/gen/data/transient_0.rs +++ b/examples/10-transient-0/output/rust/src/gen/data/transient_0.rs @@ -152,6 +152,24 @@ pub fn decode_struct_with_option(reader: &mut impl std::io::Read) -> ::std::io:: std::io::Result::Ok(crate::data::StructWithOption { a: a, b: b }) } +pub fn encode_enum_with_variants(value: &crate::data::EnumWithVariants, writer: &mut impl std::io::Write) -> ::std::io::Result::<()> { + crate::transient_0::encode_int_32(&match value { + crate::data::EnumWithVariants::Zero => 0, + crate::data::EnumWithVariants::One => 1, + crate::data::EnumWithVariants::Two => 2, + }, writer)?; + ::std::io::Result::Ok(()) +} + +pub fn decode_enum_with_variants(reader: &mut impl std::io::Read) -> ::std::io::Result:: { + std::io::Result::Ok(match &crate::transient_0::decode_int_32(reader)? { + 0 => crate::data::EnumWithVariants::Zero, + 1 => crate::data::EnumWithVariants::One, + 2 => crate::data::EnumWithVariants::Two, + _ => todo!(), + }) +} + pub fn encode_variant_one(value: &crate::data::VariantOne, writer: &mut impl std::io::Write) -> ::std::io::Result::<()> { crate::transient_0::encode_int_32(&value.a, writer)?; ::std::io::Result::Ok(()) diff --git a/examples/10-transient-0/output/rust/src/lib.rs b/examples/10-transient-0/output/rust/src/lib.rs index 3de2597..c3da14c 100644 --- a/examples/10-transient-0/output/rust/src/lib.rs +++ b/examples/10-transient-0/output/rust/src/lib.rs @@ -4,7 +4,7 @@ pub mod transient_0; #[cfg(test)] mod test { use std::io::Cursor; - use super::data::{InnerStruct, OuterStruct, StructWithBool, StructWithInt32, StructWithInt64, StructWithList, StructWithOption, StructWithString}; + use super::data::{EnumWithVariants, InnerStruct, OuterStruct, StructWithBool, StructWithInt32, StructWithInt64, StructWithList, StructWithOption, StructWithString}; #[test] fn struct_with_bool() { @@ -107,6 +107,27 @@ mod test { ); } + #[test] + fn enum_with_variants() { + assert_round_trip_encoding( + EnumWithVariants::Zero, + super::data::transient_0::encode_enum_with_variants, + super::data::transient_0::decode_enum_with_variants, + ); + + assert_round_trip_encoding( + EnumWithVariants::One, + super::data::transient_0::encode_enum_with_variants, + super::data::transient_0::decode_enum_with_variants, + ); + + assert_round_trip_encoding( + EnumWithVariants::Two, + super::data::transient_0::encode_enum_with_variants, + super::data::transient_0::decode_enum_with_variants, + ); + } + fn assert_round_trip_encoding( value: T, encode: impl Fn(&T, &mut Cursor>) -> std::io::Result<()>, -- cgit v1.2.3