compact binary serialization format with built-in compression
1use hateno::CompressionMethod;
2use hateno_serde::{from_reader, to_tag, to_writer};
3use insta::assert_debug_snapshot;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Serialize, Deserialize, PartialEq)]
7struct TestData {
8 name: String,
9 age: u32,
10 active: bool,
11 scores: Vec<f32>,
12}
13
14#[test]
15fn test_to_writer_from_reader_no_compression() {
16 let original = TestData {
17 name: "Alice".to_string(),
18 age: 30,
19 active: true,
20 scores: vec![85.5, 92.0, 78.3],
21 };
22
23 let mut buffer = Vec::new();
24 let _writer =
25 to_writer(&mut buffer, &original, CompressionMethod::None).unwrap();
26
27 let tag = to_tag(&original).unwrap();
28 assert_debug_snapshot!(tag);
29
30 let deserialized: TestData = from_reader(&buffer[..]).unwrap();
31 assert_eq!(original, deserialized);
32}
33
34#[test]
35fn test_to_writer_from_reader_gzip() {
36 let original = TestData {
37 name: "Bob".to_string(),
38 age: 25,
39 active: false,
40 scores: vec![88.5, 91.2],
41 };
42
43 let mut buffer = Vec::new();
44 let _writer =
45 to_writer(&mut buffer, &original, CompressionMethod::Gzip).unwrap();
46
47 let deserialized: TestData = from_reader(&buffer[..]).unwrap();
48 assert_eq!(original, deserialized);
49}
50
51#[test]
52fn test_to_writer_from_reader_zlib() {
53 let original = TestData {
54 name: "Charlie".to_string(),
55 age: 35,
56 active: true,
57 scores: vec![],
58 };
59
60 let mut buffer = Vec::new();
61 let _writer =
62 to_writer(&mut buffer, &original, CompressionMethod::Zlib).unwrap();
63
64 let deserialized: TestData = from_reader(&buffer[..]).unwrap();
65 assert_eq!(original, deserialized);
66}
67
68#[test]
69fn test_to_writer_from_reader_lz4() {
70 let original = TestData {
71 name: "Diana".to_string(),
72 age: 28,
73 active: true,
74 scores: vec![95.0, 87.5, 92.3, 89.1],
75 };
76
77 let mut buffer = Vec::new();
78 let _writer =
79 to_writer(&mut buffer, &original, CompressionMethod::Lz4).unwrap();
80
81 let deserialized: TestData = from_reader(&buffer[..]).unwrap();
82 assert_eq!(original, deserialized);
83}
84
85#[test]
86fn test_primitives_io() {
87 let mut buffer = Vec::new();
88
89 let value = 42u32;
90 let _writer =
91 to_writer(&mut buffer, &value, CompressionMethod::None).unwrap();
92 let deserialized: u32 = from_reader(&buffer[..]).unwrap();
93 assert_eq!(value, deserialized);
94}
95
96#[test]
97fn test_homogeneous_array_io() {
98 let mut buffer = Vec::new();
99
100 let bytes: &[u8] = b"hello world";
101 let _writer =
102 to_writer(&mut buffer, &bytes, CompressionMethod::None).unwrap();
103 let deserialized: Vec<u8> = from_reader(&buffer[..]).unwrap();
104 assert_eq!(bytes, &deserialized[..]);
105}