revbufreader

GitHub Actions Workflow docs license Crates.io

This Rust crate provides a buffered reader capable of reading chunks of bytes of a data stream in reverse order. Its implementation is an adapted copy of BufReader from the nightly std::io.

Usage

Reading chunks of bytes in reverse order:

```rust extern crate revbufreader;

use revbufreader::RevBufReader; use std::io::{self, Read};

let data = [0, 1, 2, 3, 4, 5, 6, 7]; let inner = io::Cursor::new(&data); let mut reader = RevBufReader::new(inner);

let mut buffer = [0, 0, 0]; asserteq!(reader.read(&mut buffer).ok(), Some(3)); asserteq!(buffer, [5, 6, 7]);

let mut buffer = [0, 0, 0, 0, 0]; asserteq!(reader.read(&mut buffer).ok(), Some(5)); asserteq!(buffer, [0, 1, 2, 3, 4]); ```

Reading text lines in reverse order:

```rust extern crate revbufreader;

use revbufreader::RevBufReader; use std::io::{self, BufRead};

let data = "This\nis\na sentence"; let inner = io::Cursor::new(&data); let reader = RevBufReader::new(inner); let mut lines = reader.lines();

asserteq!(lines.next().unwrap().unwrap(), "a sentence".tostring()); asserteq!(lines.next().unwrap().unwrap(), "is".tostring()); asserteq!(lines.next().unwrap().unwrap(), "This".tostring()); assert!(lines.next().is_none()); ```

Features

revbufreader has one feature: read_initializer, which corresponds to an experimental feature of nightly Rust. If you use it in your project by adding #![feature(read_initializer)], you'll need to enable it for revbufreader as well in your Cargo.toml.