50 lines
1.1 KiB
Rust
50 lines
1.1 KiB
Rust
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(())
|
|
}
|