byte_reader

A minimal byte-by-byte reader for parsing input.

build check status of byte_reader test status of byte_reader

Use case

Following situation:

I want to read and parse some input, but it's not so large-scale parsing task, so I'd like to avoid adding a heavyweight crate like nom or nom8 to my dependencies ...


Usage

```rust use byte_reader::Reader;

fn main() { // Get a &[u8] or Vec<u8> input from // a File, standard input, or something let sampleinput = "Hello, bytereader!".as_bytes();

// Create a mutable `r`
let mut r = Reader::new(sample_input);

// Use some simple operations
// to parse the input
r.consume("Hello").unwrap();
r.consume(",").unwrap();
r.skip_whitespace();
let name = r.read_snake().unwrap(); // byte_reader
r.consume("!").unwrap();

println!("Greeted to `{name}`.");

} ```


Operations

And, with location feature, you can track the reader's parsing location ( line and column ) in the input bytes :

```rust /* enable "location" feature */ use byte_reader::Reader;

fn main() { let sampleinput = "Hello, bytereader!".as_bytes();

let mut r = Reader::new(sample_input);

r.consume("Hello").unwrap();
r.consume(",").unwrap();
r.skip_whitespace();
let name_line   = r.line();   // 1
let name_column = r.column(); // 11
let name = r.read_snake().unwrap(); // byte_reader
r.consume("!").unwrap();

println!("Greeted to `{name}`.");
println!("In the input, the name starts at column {name_column} of line {name_line}");

} ```