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] ); }