ps_datachunk/owned/
serializer.rs

1use crate::utils::offsets;
2
3#[inline(always)]
4pub fn serialize_vec_with_parameters(
5    data: &mut Vec<u8>,
6    hash: &[u8],
7    data_length: usize,
8    hash_offset: usize,
9    size_offset: usize,
10) {
11    data.extend_from_slice(&vec![0u8; hash_offset - data.len()]);
12    data.extend_from_slice(hash);
13    data.extend_from_slice(&vec![0u8; size_offset - data.len()]);
14    data.extend_from_slice(&data_length.to_le_bytes());
15}
16
17#[inline(always)]
18pub fn serialize_vec_with_known_hash(data: &mut Vec<u8>, hash: &[u8]) {
19    let data_length = data.len();
20    let (hash_offset, size_offset, _) = offsets(data_length);
21
22    serialize_vec_with_parameters(data, hash, data_length, hash_offset, size_offset)
23}
24
25#[inline]
26pub fn serialize_vec(data: &mut Vec<u8>) {
27    serialize_vec_with_known_hash(data, ps_hash::hash(data).as_bytes())
28}
29
30#[inline]
31pub fn serialize_bytes_with_known_hash(data: &[u8], hash: &[u8]) -> Vec<u8> {
32    let data_length = data.len();
33    let (hash_offset, size_offset, size) = offsets(data_length);
34    let mut serialized = Vec::with_capacity(size);
35
36    serialized.extend_from_slice(data);
37
38    serialize_vec_with_parameters(&mut serialized, hash, data_length, hash_offset, size_offset);
39
40    serialized
41}
42
43#[inline]
44pub fn serialize_bytes(data: &[u8]) -> Vec<u8> {
45    serialize_bytes_with_known_hash(data, ps_hash::hash(data).as_bytes())
46}