use std::fs::File;
use std::io::{self, BufWriter, ErrorKind, Result, Write};
use std::sync::mpsc::Receiver;
pub fn write_loop(outfile: &str, write_rx: Receiver<Vec<u8>>) -> Result<()> {
let mut writer: Box<dyn Write> = if !outfile.is_empty() {
Box::new(BufWriter::new(File::create(outfile)?))
} else {
Box::new(BufWriter::new(io::stdout()))
};
loop {
let buffer = write_rx.recv().unwrap();
if buffer.is_empty() {
break;
}
if let Err(e) = writer.write_all(&buffer) {
match e.kind() {
ErrorKind::BrokenPipe => {
return Ok(());
}
_ => return Err(e),
}
};
}
Ok(())
}