From afb8ab448949eb19e09e1bdb4b263dc487a9be21 Mon Sep 17 00:00:00 2001 From: Igor Tolmachev Date: Fri, 21 Jun 2024 02:11:16 +0900 Subject: Implement deserialize Remove bincode crate and replace it by own written serializer --- src/structs/tests.rs | 95 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 79 insertions(+), 16 deletions(-) (limited to 'src/structs/tests.rs') 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 @@ use crate::structs::{ByteOrder, Settings, VariantIndexType}; -use serde::Serialize; +use serde::{Deserialize, Serialize}; -#[derive(Serialize)] -struct Struct<'a> { +#[derive(Serialize, Deserialize, Debug, PartialEq)] +struct Struct { u8: u8, u16: u16, u32: u32, u64: u64, u8arr: [u8; 3], tuple: (u16, u8), - str: &'a str, } -#[derive(Serialize)] -enum Enum<'a> { +#[derive(Serialize, Deserialize, Debug, PartialEq)] +enum Enum { Unit, Type(u16), - Tuple(u16, &'a str), + Tuple(u16, u8), Struct { u32: u32, u64: u64 }, } #[test] -fn struct_serialize_test() { +fn struct_serialize() { let object = Struct { u8: 42, u16: 26, @@ -29,7 +28,6 @@ fn struct_serialize_test() { u64: 11, u8arr: [37, 74, 111], tuple: (24, 13), - str: "yes", }; let bytes = Settings::default() @@ -38,8 +36,7 @@ fn struct_serialize_test() { .unwrap(); assert_eq!( bytes, - //u8|-u16--|----u32-----|----------u64-----------|[0]-[1]--[2]|.0 --.1---|-y----e----s| - [42, 26, 0, 69, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 37, 74, 111, 24, 0, 13, 121, 101, 115] + [42, 26, 0, 69, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 37, 74, 111, 24, 0, 13] ); let bytes = Settings::default() @@ -48,13 +45,12 @@ fn struct_serialize_test() { .unwrap(); assert_eq!( bytes, - //u8|-u16--|----u32-----|----------u64-----------|[0]-[1]--[2]|.0 --.1---|-y----e----s| - [42, 0, 26, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 11, 37, 74, 111, 0, 24, 13, 121, 101, 115] + [42, 0, 26, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 11, 37, 74, 111, 0, 24, 13] ); } #[test] -fn enum_serialize_test() { +fn enum_serialize() { let bytes = Settings::default() .byte_order(ByteOrder::Le) .variant_index_type(VariantIndexType::U8) @@ -72,9 +68,9 @@ fn enum_serialize_test() { let bytes = Settings::default() .byte_order(ByteOrder::Le) .variant_index_type(VariantIndexType::U32) - .serialize(&Enum::Tuple(26, "yes")) + .serialize(&Enum::Tuple(26, 15)) .unwrap(); - assert_eq!(bytes, [2, 0, 0, 0, 26, 0, 121, 101, 115]); + assert_eq!(bytes, [2, 0, 0, 0, 26, 0, 15]); let bytes = Settings::default() .byte_order(ByteOrder::Be) @@ -86,3 +82,70 @@ fn enum_serialize_test() { [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 37] ); } + +#[test] +fn struct_deserialize() { + let object = Struct { + u8: 42, + u16: 26, + u32: 69, + u64: 11, + u8arr: [37, 74, 111], + tuple: (24, 13), + }; + + assert_eq!( + Settings::default() + .byte_order(ByteOrder::Le) + .deserialize::(&[ + 42, 26, 0, 69, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 37, 74, 111, 24, 0, 13, + ]) + .unwrap(), + object + ); + assert_eq!( + Settings::default() + .byte_order(ByteOrder::Be) + .deserialize::(&[ + 42, 0, 26, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 11, 37, 74, 111, 0, 24, 13 + ]) + .unwrap(), + object + ); +} + +#[test] +fn enum_deserialize() { + assert_eq!( + Settings::default() + .byte_order(ByteOrder::Le) + .variant_index_type(VariantIndexType::U8) + .deserialize::(&[0]) + .unwrap(), + Enum::Unit + ); + assert_eq!( + Settings::default() + .byte_order(ByteOrder::Le) + .variant_index_type(VariantIndexType::U16) + .deserialize::(&[1, 0, 42, 0]) + .unwrap(), + Enum::Type(42) + ); + assert_eq!( + Settings::default() + .byte_order(ByteOrder::Le) + .variant_index_type(VariantIndexType::U32) + .deserialize::(&[2, 0, 0, 0, 26, 0, 15]) + .unwrap(), + Enum::Tuple(26, 15) + ); + assert_eq!( + Settings::default() + .byte_order(ByteOrder::Be) + .variant_index_type(VariantIndexType::U64) + .deserialize::(&[0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 37]) + .unwrap(), + Enum::Struct { u32: 69, u64: 37 } + ); +} -- cgit v1.2.3