use zstd;
use std::env;
use std::fs;
use std::io;
const SUFFIX: &'static str = ".zst";
fn main() {
for arg in env::args().skip(1) {
if arg.ends_with(SUFFIX) {
match decompress(&arg) {
Ok(()) => println!("Decompressed {}", arg),
Err(e) => println!("Error decompressing {}: {}", arg, e),
}
} else {
match compress(&arg) {
Ok(()) => println!("Compressed {}", arg),
Err(e) => println!("Error compressing {}: {}", arg, e),
}
}
}
}
fn compress(source: &str) -> io::Result<()> {
let mut file = fs::File::open(source)?;
let mut encoder = {
let target = fs::File::create(source.to_string() + SUFFIX)?;
zstd::Encoder::new(target, 1)?
};
io::copy(&mut file, &mut encoder)?;
encoder.finish()?;
Ok(())
}
fn decompress(source: &str) -> io::Result<()> {
let mut decoder = {
let file = fs::File::open(source)?;
zstd::Decoder::new(file)?
};
let mut target = fs::File::create(source.trim_end_matches(SUFFIX))?;
io::copy(&mut decoder, &mut target)?;
Ok(())
}