selium_protocol/
utils.rs

1use bytes::{Buf, BufMut, Bytes, BytesMut};
2
3pub fn encode_message_batch(batch: Vec<Bytes>) -> Bytes {
4    let mut bytes = BytesMut::new();
5    bytes.put_u64(batch.len() as u64);
6
7    batch.iter().for_each(|m| {
8        // Put a u64 into dst representing the length of the message
9        bytes.put_u64(m.len() as u64);
10        // Put the message bytes into dst
11        bytes.extend_from_slice(m)
12    });
13
14    bytes.into()
15}
16
17pub fn decode_message_batch(mut bytes: Bytes) -> Vec<Bytes> {
18    let num_of_messages = bytes.get_u64();
19    let mut messages = Vec::with_capacity(num_of_messages as usize);
20
21    for _ in 0..num_of_messages {
22        let message_len = bytes.get_u64();
23        let message_bytes = bytes.split_to(message_len as usize);
24        messages.push(message_bytes);
25    }
26
27    messages
28}