Expand description
Streaming parser extensions for BufRead.
This is a one-off experiment to see if we can extend the std::io::BufRead
traits with better parsing capabilities. The name is a riff on the
nom parser, which you should probably check out.
§Why?
The purpose of this crate is to make authoring streaming parsers easier. And
the way we do this is by providing more operations that decouple
“looking at bytes” from “consuming bytes”. So hence we introduce fill_
counterparts for read_until and read_exact. And two new methods:
read_while and fill_while that read bytes into a buffer based on a
predicate.
Together this should make it easier to parse bytes from streams.
§Methods
BufReadExt::read_whilereads bytes based on a predicate, consumes bytes.BufReadExt::skipSkip the firstnbytes.BufReadExt::skip_untilSkip bytes until the delimiterbyteor EOF is reached.BufReadExt::skip_whileSkip bytes while a predicate is true.ReadExt::read_bereads bytes as big-endian from a reader, consumes bytes.ReadExt::read_lereads bytes as little-endian from a reader, consumes bytes.ReadExt::read_nereads bytes using native endianness from a reader, consumes bytes.WriteExt::write_bewrite bytes as big-endian to a writer.WriteExt::write_lewrite bytes as little-endian to a writer.WriteExt::write_newrite bytes using native endianness to a writer.
§Todos
AsyncReadsupport.
§Examples
Read and write integers from IO streams with a chosen endianness:
use std::io::{Cursor, Seek, SeekFrom};
use omnom::prelude::*;
let mut buf = Cursor::new(vec![0; 15]);
let num = 12_u16;
buf.write_le(num).unwrap();
buf.seek(SeekFrom::Start(0)).unwrap();
let num: u16 = buf.read_le().unwrap();
assert_eq!(num, 12);Modules§
- prelude
- The
omnomprelude.
Traits§
- BufRead
Ext - Extend
BufReadwith methods for streaming parsing. - Read
Bytes - Trait to enable writing bytes to a reader.
- ReadExt
- Extension trait to
Readto read bytes using endianness. - Write
Bytes - Trait to enable writing bytes to a writer.
- Write
Ext - Extension trait to
Writeto write bytes using endianness.