summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-07-24 15:00:50 +0100
committerMichael Williamson <mike@zwobble.org>2026-07-24 15:00:50 +0100
commit00cc7fcf117ef694280624b314d43e1864425433 (patch)
tree49372adfbb2338b1fc7dd80bdf4e6481e5124aa6
parenta488ac6d05c30836a5a90a25a35253c88222ad95 (diff)
Support enum as field in rust-transient-0
-rw-r--r--examples/10-transient-0/output/rust/src/gen/data/transient_0.rs4
-rw-r--r--examples/10-transient-0/output/rust/src/lib.rs13
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java4
3 files changed, 16 insertions, 5 deletions
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 9892a8c..867318d 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
@@ -157,13 +157,13 @@ pub fn decode_enum_with_variants(reader: &mut impl std::io::Read) -> ::std::io::
}
pub fn encode_struct_with_enum(value: &crate::data::StructWithEnum, writer: &mut impl std::io::Write) -> ::std::io::Result::<()> {
- todo!();
+ crate::data::transient_0::encode_enum_with_variants(&value.inner, writer)?;
crate::transient_0::encode_int_32(&value.c, writer)?;
::std::io::Result::Ok(())
}
pub fn decode_struct_with_enum(reader: &mut impl std::io::Read) -> ::std::io::Result::<crate::data::StructWithEnum> {
- let inner = todo!();
+ let inner = crate::data::transient_0::decode_enum_with_variants(reader)?;
let c = crate::transient_0::decode_int_32(reader)?;
std::io::Result::Ok(crate::data::StructWithEnum { inner: inner, c: c })
}
diff --git a/examples/10-transient-0/output/rust/src/lib.rs b/examples/10-transient-0/output/rust/src/lib.rs
index 0ca708d..ffd923a 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::{EnumWithVariants, StructWithBool, StructWithInt32, StructWithInt64, StructWithList, StructWithOption, StructWithString, StructWithStruct, SumWithVariants, VariantOne, VariantTwo };
+ use super::data::{EnumWithVariants, StructWithBool, StructWithEnum, StructWithInt32, StructWithInt64, StructWithList, StructWithOption, StructWithString, StructWithStruct, SumWithVariants, VariantOne, VariantTwo };
#[test]
fn struct_with_bool() {
@@ -129,6 +129,17 @@ mod test {
}
#[test]
+ fn struct_with_enum() {
+ let value = StructWithEnum { inner: EnumWithVariants::One, c: 42 };
+
+ assert_round_trip_encoding(
+ value,
+ super::data::transient_0::encode_struct_with_enum,
+ super::data::transient_0::decode_struct_with_enum,
+ );
+ }
+
+ #[test]
fn sum_with_variants() {
assert_round_trip_encoding(
SumWithVariants::VariantOne(VariantOne { a: 10 }),
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java
index 7f1449b..e6fcb8e 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java
@@ -544,7 +544,7 @@ public class RustTransient0Generator implements Generator {
}
case EnumType enumType -> {
- yield new RustExpressionStatement(generateTodo());
+ yield generateEncode(value, enumType.namespaceName(), type);
}
case SimpleNativeType nativeType -> {
@@ -582,7 +582,7 @@ public class RustTransient0Generator implements Generator {
}
case EnumType enumType -> {
- yield generateTodo();
+ yield generateDecode(enumType.namespaceName(), type);
}
case SimpleNativeType nativeType -> {