ppvr 0.2.1

A command line pipeline viewer tools
Documentation
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 {
        // recevie vector from stats thread
        let buffer = write_rx.recv().unwrap();
        if buffer.is_empty() {
            break;
        }
        if let Err(e) = writer.write_all(&buffer) {
            match e.kind() {
                ErrorKind::BrokenPipe => {
                    // stop the program cleanly
                    return Ok(());
                }
                _ => return Err(e),
            }
        };
    }
    Ok(())
}