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:

```rust use lineriver::LineReaderNonBlock;

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