initial commit
This commit is contained in:
33
src/utils.rs
Normal file
33
src/utils.rs
Normal file
@@ -0,0 +1,33 @@
|
||||
use std::{fs, io};
|
||||
use zstd::{Decoder, Encoder};
|
||||
|
||||
pub async fn compress_parts(input: Vec<Vec<u8>>, output: fs::File, level: i32) {
|
||||
let mut encoder = Encoder::new(output, level).unwrap();
|
||||
for part in input.iter() {
|
||||
io::copy(&mut &part[..], &mut encoder).unwrap();
|
||||
}
|
||||
encoder.finish().unwrap();
|
||||
}
|
||||
|
||||
pub async fn decompress_parts(input: Vec<u8>) -> Result<Vec<Vec<u8>>, io::Error> {
|
||||
let mut decoder = Decoder::new(&input[..])?;
|
||||
let mut buf = Vec::new();
|
||||
|
||||
io::copy(&mut decoder, &mut buf)?;
|
||||
let mut index = 0;
|
||||
let mut parts: Vec<Vec<u8>> = Vec::new();
|
||||
|
||||
while index < buf.len() {
|
||||
let filename_size = u32::from_be_bytes(buf[index..index + 4].try_into().unwrap()) as usize;
|
||||
let filename = buf[index..index + filename_size + 4].to_vec();
|
||||
index += 4 + filename_size;
|
||||
|
||||
let content_size = u32::from_be_bytes(buf[index..index + 4].try_into().unwrap()) as usize;
|
||||
let content = buf[index..index + content_size + 4].to_vec();
|
||||
index += content_size + 4;
|
||||
|
||||
let part = vec![filename, content].concat();
|
||||
parts.push(part);
|
||||
}
|
||||
Ok(parts)
|
||||
}
|
||||
Reference in New Issue
Block a user