diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-07-26 00:55:32 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-07-26 00:55:32 +0100 |
| commit | f47074c2955d97c581255886b6597bbc95a4ff10 (patch) | |
| tree | b110a54e4f2f464965708d52fd8a5a749ceaadbf /examples/11-transient-0/output/rust/src/lib.rs | |
| parent | 6925ba376ee030738d5634574b3f3e353fd19d47 (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.rs | 26 |
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 } } |
