CI coveralls crates.io doc.rs

lineriver

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

The [LineReader] object is akin to a [BufReader] object that returns only complete lines, but without blocking. The [LineRead] trait, on the other hand, is akin to the [BufRead] trait - it concentrates the public API and allows us to create agnostic collections of LineReaders with distinct underlying types.

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 [LineReader] for details.

Usage

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

```rust use lineriver::{LineReader, LineRead};

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