use crate::structs::{ByteOrder, Settings, VariantIndexType}; use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Debug, PartialEq)] struct Struct { u8: u8, u16: u16, u32: u32, u64: u64, u8arr: [u8; 3], tuple: (u16, u8), } #[derive(Serialize, Deserialize, Debug, PartialEq)] enum Enum { Unit, Type(u16), Tuple(u16, u8), Struct { u32: u32, u64: u64 }, } #[test] fn struct_serialize() { let object = Struct { u8: 42, u16: 26, u32: 69, u64: 11, u8arr: [37, 74, 111], tuple: (24, 13), }; let bytes = Settings::default() .byte_order(ByteOrder::Le) .serialize(&object) .unwrap(); assert_eq!( bytes, [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() .byte_order(ByteOrder::Be) .serialize(&object) .unwrap(); assert_eq!( bytes, [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() { 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, 15)) .unwrap(); assert_eq!(bytes, [2, 0, 0, 0, 26, 0, 15]); 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] ); } #[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 } ); }