summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-07-24 15:04:14 +0100
committerMichael Williamson <mike@zwobble.org>2026-07-24 15:04:14 +0100
commiteaa4d75630e490e342d2374c35768c309199a150 (patch)
treeba862542ed0423d048e395716eb879e22c316fc2
parent0e9e0974e0c2a8906e484082dc4e6666faa8a2a7 (diff)
Struct sum 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.rs16
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java4
3 files changed, 19 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 cd7b772..82fb5f7 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
@@ -211,13 +211,13 @@ pub fn decode_variant_two(reader: &mut impl std::io::Read) -> ::std::io::Result:
}
pub fn encode_struct_with_sum(value: &crate::data::StructWithSum, writer: &mut impl std::io::Write) -> ::std::io::Result::<()> {
- todo!();
+ crate::data::transient_0::encode_sum_with_variants(&value.inner, writer)?;
crate::transient_0::encode_int_32(&value.b, writer)?;
::std::io::Result::Ok(())
}
pub fn decode_struct_with_sum(reader: &mut impl std::io::Read) -> ::std::io::Result::<crate::data::StructWithSum> {
- let inner = todo!();
+ let inner = crate::data::transient_0::decode_sum_with_variants(reader)?;
let b = crate::transient_0::decode_int_32(reader)?;
std::io::Result::Ok(crate::data::StructWithSum { inner: inner, b: b })
}
diff --git a/examples/10-transient-0/output/rust/src/lib.rs b/examples/10-transient-0/output/rust/src/lib.rs
index ffd923a..e31e1fb 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, StructWithEnum, StructWithInt32, StructWithInt64, StructWithList, StructWithOption, StructWithString, StructWithStruct, SumWithVariants, VariantOne, VariantTwo };
+ use super::data::{EnumWithVariants, StructWithBool, StructWithEnum, StructWithInt32, StructWithInt64, StructWithList, StructWithOption, StructWithString, StructWithStruct, StructWithSum, SumWithVariants, VariantOne, VariantTwo };
#[test]
fn struct_with_bool() {
@@ -154,6 +154,20 @@ mod test {
);
}
+ #[test]
+ fn struct_with_sum() {
+ let value = StructWithSum {
+ inner: SumWithVariants::VariantTwo(VariantTwo { a: 25 }),
+ b: 42,
+ };
+
+ assert_round_trip_encoding(
+ value,
+ super::data::transient_0::encode_struct_with_sum,
+ super::data::transient_0::decode_struct_with_sum,
+ );
+ }
+
fn assert_round_trip_encoding<T: std::cmp::PartialEq + std::fmt::Debug>(
value: T,
encode: impl Fn(&T, &mut Cursor<Vec<u8>>) -> std::io::Result<()>,
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 e6fcb8e..8c84909 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
@@ -556,7 +556,7 @@ public class RustTransient0Generator implements Generator {
}
case SumType sumType -> {
- yield new RustExpressionStatement(generateTodo());
+ yield generateEncode(value, sumType.namespaceName(), type);
}
case TypeLevelValueType typeLevelValueType -> {
@@ -594,7 +594,7 @@ public class RustTransient0Generator implements Generator {
}
case SumType sumType -> {
- yield generateTodo();
+ yield generateDecode(sumType.namespaceName(), type);
}
case TypeLevelValueType typeLevelValueType -> {