From d6055b5ac4f3ff5016bc4881cf1cc109a22c40ba Mon Sep 17 00:00:00 2001 From: Igor Tolmachev Date: Sun, 16 Jun 2024 21:36:13 +0900 Subject: Implement serialize --- src/structs/tests.rs | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 src/structs/tests.rs (limited to 'src/structs/tests.rs') diff --git a/src/structs/tests.rs b/src/structs/tests.rs new file mode 100644 index 0000000..0fa5347 --- /dev/null +++ b/src/structs/tests.rs @@ -0,0 +1,88 @@ +use crate::structs::{ByteOrder, Settings, VariantIndexType}; +use serde::Serialize; + +#[derive(Serialize)] +struct Struct<'a> { + u8: u8, + u16: u16, + u32: u32, + u64: u64, + u8arr: [u8; 3], + tuple: (u16, u8), + str: &'a str, +} + +#[derive(Serialize)] +enum Enum<'a> { + Unit, + Type(u16), + Tuple(u16, &'a str), + Struct { u32: u32, u64: u64 }, +} + +#[test] +fn struct_serialize_test() { + let object = Struct { + u8: 42, + u16: 26, + u32: 69, + u64: 11, + u8arr: [37, 74, 111], + tuple: (24, 13), + str: "yes", + }; + + let bytes = Settings::default() + .byte_order(ByteOrder::Le) + .serialize(&object) + .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] + ); + + let bytes = Settings::default() + .byte_order(ByteOrder::Be) + .serialize(&object) + .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] + ); +} + +#[test] +fn enum_serialize_test() { + let bytes = Settings::default() + .byte_order(ByteOrder::Le) + .variant_index_type(VariantIndexType::U8) + .serialize(&Enum::Unit) + .unwrap(); + assert_eq!(bytes, [0]); + + let bytes = Settings::default() + .byte_order(ByteOrder::Le) + .variant_index_type(VariantIndexType::U16) + .serialize(&Enum::Type(42)) + .unwrap(); + assert_eq!(bytes, [1, 0, 42, 0]); + + let bytes = Settings::default() + .byte_order(ByteOrder::Le) + .variant_index_type(VariantIndexType::U32) + .serialize(&Enum::Tuple(26, "yes")) + .unwrap(); + assert_eq!(bytes, [2, 0, 0, 0, 26, 0, 121, 101, 115]); + + let bytes = Settings::default() + .byte_order(ByteOrder::Be) + .variant_index_type(VariantIndexType::U64) + .serialize(&Enum::Struct { u32: 69, u64: 37 }) + .unwrap(); + assert_eq!( + bytes, + [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 37] + ); +} -- cgit v1.2.3