extern crate ruzstd;
use std::fs::File;
use std::io::{Read, Write};
fn main() {
let mut file_paths: Vec<_> = std::env::args().filter(|f| !f.starts_with('-')).collect();
let flags: Vec<_> = std::env::args().filter(|f| f.starts_with('-')).collect();
file_paths.remove(0);
if !flags.contains(&"-d".to_owned()) {
eprintln!("This zstd implementation only supports decompression. Please add a \"-d\" flag");
return;
}
if !flags.contains(&"-c".to_owned()) {
eprintln!("This zstd implementation only supports output on the stdout. Please add a \"-c\" flag and pipe the output into a file");
return;
}
if flags.len() != 2 {
eprintln!(
"No flags other than -d and -c are currently implemented. Flags used: {:?}",
flags
);
return;
}
for path in file_paths {
eprintln!("File: {}", path);
let f = File::open(path).unwrap();
let mut buf_read = std::io::BufReader::new(f);
let mut decoder = ruzstd::StreamingDecoder::new(&mut buf_read).unwrap();
let mut buf = [0u8; 1024 * 1024];
let mut stdout = std::io::stdout();
while !decoder.decoder.is_finished() || decoder.decoder.can_collect() > 0 {
let bytes = decoder.read(&mut buf[..]).unwrap();
stdout.write_all(&buf[..bytes]).unwrap();
}
}
}