diff options
| author | Igor Tolmachev <me@igorek.dev> | 2024-06-21 02:11:16 +0900 |
|---|---|---|
| committer | Igor Tolmachev <me@igorek.dev> | 2024-06-23 15:34:35 +0900 |
| commit | afb8ab448949eb19e09e1bdb4b263dc487a9be21 (patch) | |
| tree | 5806bc9bc566dcda64818917a222c313dde3cb55 /src/structs/tests.rs | |
| parent | d6055b5ac4f3ff5016bc4881cf1cc109a22c40ba (diff) | |
| download | archivator-afb8ab448949eb19e09e1bdb4b263dc487a9be21.tar.gz archivator-afb8ab448949eb19e09e1bdb4b263dc487a9be21.zip | |
Implement deserialize
Remove bincode crate and replace it by own written serializer
Diffstat (limited to 'src/structs/tests.rs')
| -rw-r--r-- | src/structs/tests.rs | 95 |
1 files changed, 79 insertions, 16 deletions
diff --git a/src/structs/tests.rs b/src/structs/tests.rs index 0fa5347..9ee7ce5 100644 --- a/src/structs/tests.rs +++ b/src/structs/tests.rs | |||
| @@ -1,27 +1,26 @@ | |||
| 1 | use crate::structs::{ByteOrder, Settings, VariantIndexType}; | 1 | use crate::structs::{ByteOrder, Settings, VariantIndexType}; |
| 2 | use serde::Serialize; | 2 | use serde::{Deserialize, Serialize}; |
| 3 | 3 | ||
| 4 | #[derive(Serialize)] | 4 | #[derive(Serialize, Deserialize, Debug, PartialEq)] |
| 5 | struct Struct<'a> { | 5 | struct Struct { |
| 6 | u8: u8, | 6 | u8: u8, |
| 7 | u16: u16, | 7 | u16: u16, |
| 8 | u32: u32, | 8 | u32: u32, |
| 9 | u64: u64, | 9 | u64: u64, |
| 10 | u8arr: [u8; 3], | 10 | u8arr: [u8; 3], |
| 11 | tuple: (u16, u8), | 11 | tuple: (u16, u8), |
| 12 | str: &'a str, | ||
| 13 | } | 12 | } |
| 14 | 13 | ||
| 15 | #[derive(Serialize)] | 14 | #[derive(Serialize, Deserialize, Debug, PartialEq)] |
| 16 | enum Enum<'a> { | 15 | enum Enum { |
| 17 | Unit, | 16 | Unit, |
| 18 | Type(u16), | 17 | Type(u16), |
| 19 | Tuple(u16, &'a str), | 18 | Tuple(u16, u8), |
| 20 | Struct { u32: u32, u64: u64 }, | 19 | Struct { u32: u32, u64: u64 }, |
| 21 | } | 20 | } |
| 22 | 21 | ||
| 23 | #[test] | 22 | #[test] |
| 24 | fn struct_serialize_test() { | 23 | fn struct_serialize() { |
| 25 | let object = Struct { | 24 | let object = Struct { |
| 26 | u8: 42, | 25 | u8: 42, |
| 27 | u16: 26, | 26 | u16: 26, |
| @@ -29,7 +28,6 @@ fn struct_serialize_test() { | |||
| 29 | u64: 11, | 28 | u64: 11, |
| 30 | u8arr: [37, 74, 111], | 29 | u8arr: [37, 74, 111], |
| 31 | tuple: (24, 13), | 30 | tuple: (24, 13), |
| 32 | str: "yes", | ||
| 33 | }; | 31 | }; |
| 34 | 32 | ||
| 35 | let bytes = Settings::default() | 33 | let bytes = Settings::default() |
| @@ -38,8 +36,7 @@ fn struct_serialize_test() { | |||
| 38 | .unwrap(); | 36 | .unwrap(); |
| 39 | assert_eq!( | 37 | assert_eq!( |
| 40 | bytes, | 38 | bytes, |
| 41 | //u8|-u16--|----u32-----|----------u64-----------|[0]-[1]--[2]|.0 --.1---|-y----e----s| | 39 | [42, 26, 0, 69, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 37, 74, 111, 24, 0, 13] |
| 42 | [42, 26, 0, 69, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 37, 74, 111, 24, 0, 13, 121, 101, 115] | ||
| 43 | ); | 40 | ); |
| 44 | 41 | ||
| 45 | let bytes = Settings::default() | 42 | let bytes = Settings::default() |
| @@ -48,13 +45,12 @@ fn struct_serialize_test() { | |||
| 48 | .unwrap(); | 45 | .unwrap(); |
| 49 | assert_eq!( | 46 | assert_eq!( |
| 50 | bytes, | 47 | bytes, |
| 51 | //u8|-u16--|----u32-----|----------u64-----------|[0]-[1]--[2]|.0 --.1---|-y----e----s| | 48 | [42, 0, 26, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 11, 37, 74, 111, 0, 24, 13] |
| 52 | [42, 0, 26, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 11, 37, 74, 111, 0, 24, 13, 121, 101, 115] | ||
| 53 | ); | 49 | ); |
| 54 | } | 50 | } |
| 55 | 51 | ||
| 56 | #[test] | 52 | #[test] |
| 57 | fn enum_serialize_test() { | 53 | fn enum_serialize() { |
| 58 | let bytes = Settings::default() | 54 | let bytes = Settings::default() |
| 59 | .byte_order(ByteOrder::Le) | 55 | .byte_order(ByteOrder::Le) |
| 60 | .variant_index_type(VariantIndexType::U8) | 56 | .variant_index_type(VariantIndexType::U8) |
| @@ -72,9 +68,9 @@ fn enum_serialize_test() { | |||
| 72 | let bytes = Settings::default() | 68 | let bytes = Settings::default() |
| 73 | .byte_order(ByteOrder::Le) | 69 | .byte_order(ByteOrder::Le) |
| 74 | .variant_index_type(VariantIndexType::U32) | 70 | .variant_index_type(VariantIndexType::U32) |
| 75 | .serialize(&Enum::Tuple(26, "yes")) | 71 | .serialize(&Enum::Tuple(26, 15)) |
| 76 | .unwrap(); | 72 | .unwrap(); |
| 77 | assert_eq!(bytes, [2, 0, 0, 0, 26, 0, 121, 101, 115]); | 73 | assert_eq!(bytes, [2, 0, 0, 0, 26, 0, 15]); |
| 78 | 74 | ||
| 79 | let bytes = Settings::default() | 75 | let bytes = Settings::default() |
| 80 | .byte_order(ByteOrder::Be) | 76 | .byte_order(ByteOrder::Be) |
| @@ -86,3 +82,70 @@ fn enum_serialize_test() { | |||
| 86 | [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 37] | 82 | [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 37] |
| 87 | ); | 83 | ); |
| 88 | } | 84 | } |
| 85 | |||
| 86 | #[test] | ||
| 87 | fn struct_deserialize() { | ||
| 88 | let object = Struct { | ||
| 89 | u8: 42, | ||
| 90 | u16: 26, | ||
| 91 | u32: 69, | ||
| 92 | u64: 11, | ||
| 93 | u8arr: [37, 74, 111], | ||
| 94 | tuple: (24, 13), | ||
| 95 | }; | ||
| 96 | |||
| 97 | assert_eq!( | ||
| 98 | Settings::default() | ||
| 99 | .byte_order(ByteOrder::Le) | ||
| 100 | .deserialize::<Struct>(&[ | ||
| 101 | 42, 26, 0, 69, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 37, 74, 111, 24, 0, 13, | ||
| 102 | ]) | ||
| 103 | .unwrap(), | ||
| 104 | object | ||
| 105 | ); | ||
| 106 | assert_eq!( | ||
| 107 | Settings::default() | ||
| 108 | .byte_order(ByteOrder::Be) | ||
| 109 | .deserialize::<Struct>(&[ | ||
| 110 | 42, 0, 26, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 11, 37, 74, 111, 0, 24, 13 | ||
| 111 | ]) | ||
| 112 | .unwrap(), | ||
| 113 | object | ||
| 114 | ); | ||
| 115 | } | ||
| 116 | |||
| 117 | #[test] | ||
| 118 | fn enum_deserialize() { | ||
| 119 | assert_eq!( | ||
| 120 | Settings::default() | ||
| 121 | .byte_order(ByteOrder::Le) | ||
| 122 | .variant_index_type(VariantIndexType::U8) | ||
| 123 | .deserialize::<Enum>(&[0]) | ||
| 124 | .unwrap(), | ||
| 125 | Enum::Unit | ||
| 126 | ); | ||
| 127 | assert_eq!( | ||
| 128 | Settings::default() | ||
| 129 | .byte_order(ByteOrder::Le) | ||
| 130 | .variant_index_type(VariantIndexType::U16) | ||
| 131 | .deserialize::<Enum>(&[1, 0, 42, 0]) | ||
| 132 | .unwrap(), | ||
| 133 | Enum::Type(42) | ||
| 134 | ); | ||
| 135 | assert_eq!( | ||
| 136 | Settings::default() | ||
| 137 | .byte_order(ByteOrder::Le) | ||
| 138 | .variant_index_type(VariantIndexType::U32) | ||
| 139 | .deserialize::<Enum>(&[2, 0, 0, 0, 26, 0, 15]) | ||
| 140 | .unwrap(), | ||
| 141 | Enum::Tuple(26, 15) | ||
| 142 | ); | ||
| 143 | assert_eq!( | ||
| 144 | Settings::default() | ||
| 145 | .byte_order(ByteOrder::Be) | ||
| 146 | .variant_index_type(VariantIndexType::U64) | ||
| 147 | .deserialize::<Enum>(&[0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 37]) | ||
| 148 | .unwrap(), | ||
| 149 | Enum::Struct { u32: 69, u64: 37 } | ||
| 150 | ); | ||
| 151 | } | ||
