workflow_serializer/
tests.rs1#[allow(clippy::module_inception)]
2#[cfg(test)]
3mod tests {
4
5 use crate::prelude::{load, store, Deserializer, Serializable, Serializer};
6 use crate::result::IoResult;
7 use borsh::{BorshDeserialize, BorshSerialize};
8
9 #[derive(BorshSerialize, BorshDeserialize, Debug, PartialEq)]
10 struct MyStruct {
11 field1: u32,
12 field2: String,
13 }
14
15 #[test]
16 fn test_serializer_store_and_load() -> Result<(), Box<dyn std::error::Error>> {
17 let value = MyStruct {
18 field1: 42,
19 field2: String::from("Hello, world!"),
20 };
21
22 let mut buffer = Vec::new();
24 store!(MyStruct, &value, &mut buffer)?;
25
26 let deserialized_value: MyStruct = load!(MyStruct, &mut buffer.as_slice())?;
28
29 assert_eq!(value, deserialized_value);
31
32 Ok(())
33 }
34
35 struct MyVersionedStruct {
36 field1: u32,
37 field2: String,
38 field3: bool,
39 }
40
41 impl Serializer for MyVersionedStruct {
42 fn serialize<W: std::io::Write>(&self, writer: &mut W) -> std::io::Result<()> {
43 store!(u32, &1, writer)?;
45 store!(u32, &self.field1, writer)?;
47 store!(String, &self.field2, writer)?;
48 store!(bool, &self.field3, writer)?;
49
50 Ok(())
51 }
52 }
53
54 impl Deserializer for MyVersionedStruct {
55 fn deserialize<R: std::io::Read>(reader: &mut R) -> IoResult<Self> {
56 let version: u32 = load!(u32, reader)?;
58 let field1: u32 = load!(u32, reader)?;
60 let field2: String = load!(String, reader)?;
61 let field3: bool = load!(bool, reader)?;
62
63 assert_eq!(version, 1);
64
65 Ok(Self {
66 field1,
67 field2,
68 field3,
69 })
70 }
71 }
72
73 #[test]
74 fn test_serializer_versioning() -> Result<(), Box<dyn std::error::Error>> {
75 let value = MyVersionedStruct {
76 field1: 42,
77 field2: String::from("Hello, world!"),
78 field3: true,
79 };
80
81 let serializable = Serializable(value);
82 let mut buffer = Vec::new();
83 borsh::BorshSerialize::serialize(&serializable, &mut buffer)?;
84
85 let deserialized: Serializable<MyVersionedStruct> =
86 borsh::BorshDeserialize::deserialize(&mut buffer.as_slice())?;
87 let deserialized_value = deserialized.into_inner();
88
89 assert_eq!(deserialized_value.field1, 42);
91 assert!(deserialized_value.field2 == "Hello, world!");
92 assert!(deserialized_value.field3);
93
94 Ok(())
95 }
96}