use std::fs::{File, OpenOptions};
use std::io::{self, BufRead, BufReader, Write};
use std::path::Path;
pub fn append_compressed_frame(archive_path: &Path, data: &[u8]) -> io::Result<()> {
let file = OpenOptions::new()
.create(true)
.append(true)
.open(archive_path)?;
let mut encoder = zstd::Encoder::new(file, 3)?;
encoder.write_all(data)?;
let file = encoder.finish()?;
file.sync_data()?;
Ok(())
}
pub fn open_archive_reader(archive_path: &Path) -> io::Result<Option<Box<dyn BufRead>>> {
let file = match File::open(archive_path) {
Ok(f) => f,
Err(e) if e.kind() == io::ErrorKind::NotFound => return Ok(None),
Err(e) => return Err(e),
};
let decoder = zstd::Decoder::new(file)?;
Ok(Some(Box::new(BufReader::new(decoder))))
}