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.
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); } } ```