s3p_core/
chunk.rs

1use crate::errors::*;
2
3pub fn split_into_chunks(data: Vec<u8>, chunk_size: usize) -> Vec<Vec<u8>> {
4    if chunk_size == 0 {
5        return vec![data];
6    }
7    let mut out = Vec::new();
8    let mut i = 0;
9    while i < data.len() {
10        let end = (i + chunk_size).min(data.len());
11        let mut chunk = data[i..end].to_vec();
12        if chunk.len() < chunk_size {
13            chunk.resize(chunk_size, 0); // pad final chunk with zeros
14        }
15        out.push(chunk);
16        i += chunk_size;
17    }
18    if out.is_empty() && data.is_empty() {
19        out.push(vec![0u8; chunk_size]);
20    }
21    out
22}
23
24pub fn join_chunks(chunks: &[Vec<u8>], original_size: usize) -> Result<Vec<u8>> {
25    let mut buf = Vec::with_capacity(chunks.len() * chunks[0].len());
26    for c in chunks {
27        buf.extend_from_slice(c);
28    }
29    buf.truncate(original_size);
30    Ok(buf)
31}