| 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(()) |
| } |