procwire_client/codec/
raw.rs1use bytes::Bytes;
24
25pub struct RawCodec;
30
31impl RawCodec {
32 #[inline]
36 pub fn serialize(data: &[u8]) -> Bytes {
37 Bytes::copy_from_slice(data)
38 }
39
40 #[inline]
42 pub fn serialize_bytes(data: Bytes) -> Bytes {
43 data
44 }
45
46 #[inline]
48 pub fn deserialize(data: &[u8]) -> &[u8] {
49 data
50 }
51
52 #[inline]
54 pub fn deserialize_bytes(data: &Bytes) -> &[u8] {
55 data
56 }
57}
58
59#[cfg(test)]
60mod tests {
61 use super::*;
62
63 #[test]
64 fn test_serialize_round_trip() {
65 let original = b"hello world";
66 let serialized = RawCodec::serialize(original);
67 let deserialized = RawCodec::deserialize(&serialized);
68 assert_eq!(deserialized, original);
69 }
70
71 #[test]
72 fn test_serialize_empty() {
73 let empty: &[u8] = b"";
74 let serialized = RawCodec::serialize(empty);
75 assert!(serialized.is_empty());
76 assert!(RawCodec::deserialize(&serialized).is_empty());
77 }
78
79 #[test]
80 fn test_serialize_large_buffer() {
81 let large = vec![0xAB; 1024 * 1024]; let serialized = RawCodec::serialize(&large);
83 assert_eq!(serialized.len(), 1024 * 1024);
84 assert_eq!(RawCodec::deserialize(&serialized), &large[..]);
85 }
86
87 #[test]
88 fn test_serialize_bytes_zero_copy() {
89 let original = Bytes::from_static(b"static data");
90 let serialized = RawCodec::serialize_bytes(original.clone());
91
92 assert_eq!(serialized.as_ptr(), original.as_ptr());
94 assert_eq!(serialized.len(), original.len());
95 }
96
97 #[test]
98 fn test_deserialize_bytes_zero_copy() {
99 let bytes = Bytes::from_static(b"test data");
100 let deserialized = RawCodec::deserialize_bytes(&bytes);
101
102 assert_eq!(deserialized.as_ptr(), bytes.as_ptr());
104 }
105
106 #[test]
107 fn test_binary_data_preserved() {
108 let all_bytes: Vec<u8> = (0..=255).collect();
110 let serialized = RawCodec::serialize(&all_bytes);
111 assert_eq!(RawCodec::deserialize(&serialized), &all_bytes[..]);
112 }
113}