summaryrefslogtreecommitdiff
path: root/examples/11-transient-0/output/rust/src/lib.rs
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-07-26 00:55:32 +0100
committerMichael Williamson <mike@zwobble.org>2026-07-26 00:55:32 +0100
commitf47074c2955d97c581255886b6597bbc95a4ff10 (patch)
treeb110a54e4f2f464965708d52fd8a5a749ceaadbf /examples/11-transient-0/output/rust/src/lib.rs
parent6925ba376ee030738d5634574b3f3e353fd19d47 (diff)
Implement shared values for rust-transient-0
Diffstat (limited to 'examples/11-transient-0/output/rust/src/lib.rs')
-rw-r--r--examples/11-transient-0/output/rust/src/lib.rs26
1 files changed, 17 insertions, 9 deletions
diff --git a/examples/11-transient-0/output/rust/src/lib.rs b/examples/11-transient-0/output/rust/src/lib.rs
index 63e7c67..63a2799 100644
--- a/examples/11-transient-0/output/rust/src/lib.rs
+++ b/examples/11-transient-0/output/rust/src/lib.rs
@@ -3,8 +3,10 @@ pub mod transient_0;
#[cfg(test)]
mod test {
+ use std::any::Any;
use std::io::Cursor;
use std::sync::Arc;
+ use std::collections::HashMap;
use super::data::{EnumWithVariants, StructWithBool, StructWithDifferentSharedTypes, StructWithEnum, StructWithInt32, StructWithInt64, StructWithList, StructWithListOfShared, StructWithOption, StructWithSharedSumAndVariant, StructWithString, StructWithStruct, StructWithSum, SumWithVariants, VariantOne, VariantTwo };
#[test]
@@ -171,17 +173,21 @@ mod test {
#[test]
fn struct_with_list_of_shared() {
+ let a = Arc::new(StructWithInt32 { a: 10, b: 25 });
+ let b = Arc::new(StructWithInt32 { a: 42, b: 47 });
+
let value = StructWithListOfShared {
- inner: vec![
- Arc::new(StructWithInt32 { a: 10, b: 25 }),
- ],
+ inner: vec![Arc::clone(&a), Arc::clone(&a), Arc::clone(&b), a, b],
};
- assert_round_trip_encoding(
+ let decoded_value = assert_round_trip_encoding(
value,
super::data::transient_0::encode_struct_with_list_of_shared,
super::data::transient_0::decode_struct_with_list_of_shared,
);
+ assert!(Arc::ptr_eq(&decoded_value.inner[0], &decoded_value.inner[1]));
+ assert!(Arc::ptr_eq(&decoded_value.inner[0], &decoded_value.inner[3]));
+ assert!(Arc::ptr_eq(&decoded_value.inner[2], &decoded_value.inner[4]));
}
#[test]
@@ -215,15 +221,17 @@ mod test {
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<()>,
- decode: impl Fn(&mut Cursor<Vec<u8>>) -> std::io::Result<T>,
- ) {
+ encode: impl Fn(&T, &mut Cursor<Vec<u8>>, &mut HashMap<usize, i64>) -> std::io::Result<()>,
+ decode: impl Fn(&mut Cursor<Vec<u8>>, &mut Vec<Arc<dyn Any + Sync + Send>>) -> std::io::Result<T>,
+ ) -> T {
let mut bytes = Cursor::new(Vec::new());
- encode(&value, &mut bytes).unwrap();
+ encode(&value, &mut bytes, &mut HashMap::new()).unwrap();
bytes.set_position(0);
- let decoded_value = decode(&mut bytes).unwrap();
+ let decoded_value = decode(&mut bytes, &mut Vec::new()).unwrap();
assert_eq!(value, decoded_value);
+
+ decoded_value
}
}