extern crate futures;
extern crate tokio_core;
extern crate tokio_stdin;
extern crate stream_combinators;
use futures::stream::{once, Stream};
use tokio_core::reactor::Core;
use tokio_stdin::spawn_stdin_stream_unbounded;
use stream_combinators::FilterFoldStream;
fn main() {
let mut core = Core::new().unwrap();
let prog = spawn_stdin_stream_unbounded()
.chain(once(Ok('\n' as u8)))
.filter_fold(vec![], |mut buf, byte| {
if byte == ('\n' as u8) {
let s = String::from_utf8(buf).unwrap();
Ok((vec![], Some(s)))
} else {
buf.push(byte);
Ok((buf, None))
}
})
.for_each(|line| {
println!("{}", line);
Ok(())
});
core.run(prog).unwrap()
}