Skip to content

Commit 4499f2c

Browse files
Add deserialization spec
1 parent fae1f4b commit 4499f2c

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

src/client/terrain/util/buffer_serializer.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,23 @@ fn tokenize_buffer(array: Vec<i32>) -> Vec<RLEToken> {
4848
vec
4949
}
5050

51+
pub fn deserialize_buffer(bytes: Vec<Bytes>) -> Vec<i32> {
52+
let mut vec = Vec::<i32>::new();
53+
54+
bytes.iter().for_each(|byte| {
55+
let symbol_bytes = &byte[0..4];
56+
let count_bytes = &byte[4..8];
57+
let symbol = i32::from_le_bytes(symbol_bytes.try_into().unwrap());
58+
let count = i32::from_le_bytes(count_bytes.try_into().unwrap());
59+
60+
for _ in 0..count {
61+
vec.push(symbol);
62+
}
63+
});
64+
65+
vec
66+
}
67+
5168
fn revert_buffer_tokenization(tokens: Vec<RLEToken>) -> Vec<i32> {
5269
let mut vec = Vec::<i32>::new();
5370

@@ -102,6 +119,13 @@ pub mod tests {
102119
let compressed_bytes = bytes.iter().fold(0, |acc, x| acc + x.len());
103120

104121
assert!(compressed_bytes < default_bytes);
122+
}
105123

124+
#[test]
125+
fn test_serialization_deserialization() {
126+
let array = vec![1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3];
127+
let bytes = serialize_buffer(array.clone());
128+
let deserialized_array = deserialize_buffer(bytes);
129+
assert_eq!(array, deserialized_array);
106130
}
107131
}

0 commit comments

Comments
 (0)