timeout-readwrite 0.4.0

Adds timeout capabilities to Readers and Writers
Documentation
extern crate timeout_readwrite;

use std::env;
use std::io::Result;
use std::io::{BufRead, BufReader};
use std::process;
use std::time::Duration;

use timeout_readwrite::TimeoutReadExt;

fn each_line<R: BufRead>(rdr: R) -> Result<()> {
    let lines = rdr.lines();

    for rslt_line in lines {
        let line = rslt_line?;
        println!("{}", line);
    }
    Ok(())
}

fn do_command<I: Iterator<Item = String>>(mut args: I) -> Result<()> {
    let cmd = args.next().expect("did not pass a program");
    let mut cmd = process::Command::new(cmd);
    for arg in args {
        cmd.arg(arg);
    }

    let child = cmd
        .stdout(process::Stdio::piped())
        .stderr(process::Stdio::null())
        .spawn()
        .expect("spawning did not succeed");

    let stdout = child.stdout.expect("stdout must be there");
    each_line(BufReader::new(stdout.with_timeout(Duration::new(5, 0))))
}

fn main() {
    let args = env::args().skip(1);
    do_command(args).expect("failed to do command");
}