compact binary serialization format with built-in compression
at trunk 2.7 kB view raw
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}