lineriver 0.1.0

Non-blocking buffered line reader for Read objects
Documentation

CI coveralls

lineriver

linereader is a rust crate that provides a non-blocking buffered line reader for Read objects.

The [LineReaderNonBlock] object is akin to a BufReader object that returns only complete lines, but without blocking. It also implements the BufRead trait, but deviates from it by not blocking in read_line, and allowing it to be called multiple times.

This crate works very well with the polling crate, which allows us to block waiting on data to be available in any one of multiple streams (files, sockets, etc.). It's an alternative to using threads and/or tokio.

See [LineReaderNonBlock] for details.

Usage

The simplest way to explain how to use LineReaderNonBlock is with a busy-loop example:

use lineriver::LineReaderNonBlock;

let mut linereader = LineReaderNonBlock::new(reader)?;
while !linereader.eof() {
    linereader.read_available()?;
    let lines = linereader.lines_get();
    for line in lines {
        print!("{}", line);
    }
}