Expand description
A library for zero-allocation parsing of binary formats.
§Example
use tarrasque::{Endianness, ExtractError, Stream, extract};
extract! {
/// A 2D point.
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub struct Point[4](endianness: Endianness) {
/// The x-coordinate of this point.
pub x: u16 = [endianness],
/// The y-coordinate of this point.
pub y: u16 = [endianness],
}
}
fn main() {
// A stream of bytes.
let mut stream = Stream(&[1, 2, 3, 4, 5, 6, 7, 8]);
// Extract a point containing two big-endian `u16`s from the stream.
let point = stream.extract::<Point, _>(Endianness::Big);
assert_eq!(point, Ok(Point { x: 258, y: 772 }));
// Extract a point containing two little-endian `u16`s from the stream.
let point = stream.extract::<Point, _>(Endianness::Little);
assert_eq!(point, Ok(Point { x: 1541, y: 2055 }));
// Attempt to extract a point from the empty stream.
let point = stream.extract::<Point, _>(Endianness::Big);
assert_eq!(point, Err(ExtractError::Insufficient(2)));
}
Macros§
- extract
- Generates a struct and an implementation of
Extract
(and optionallySpan
) for that struct.
Structs§
- Stream
- A stream of bytes from which values can be extracted.
- Unwrap
Stream - A
Stream
wrapper that unwraps extracted values. - View
- A slice of bytes containing values that span a fixed number of bytes.
- View
Iter - An iterator over the values in a
View
.
Enums§
- Endianness
- A byte order.
- Extract
Error - An error encountered while extracting a value from a stream of bytes.
Traits§
- Extract
- A type that can be extracted from a stream of bytes.
- Span
- A type that spans a fixed number of bytes.
Functions§
- be_f32
- Returns the first four bytes in the supplied slice as a big-endian
f32
. - be_f64
- Returns the first eight bytes in the supplied slice as a big-endian
f64
. - be_i16
- Returns the first two bytes in the supplied slice as a big-endian
i16
. - be_i32
- Returns the first four bytes in the supplied slice as a big-endian
i32
. - be_i64
- Returns the first eight bytes in the supplied slice as a big-endian
i64
. - be_u16
- Returns the first two bytes in the supplied slice as a big-endian
u16
. - be_u32
- Returns the first four bytes in the supplied slice as a big-endian
u32
. - be_u64
- Returns the first eight bytes in the supplied slice as a big-endian
u64
. - le_f32
- Returns the first four bytes in the supplied slice as a little-endian
f32
. - le_f64
- Returns the first eight bytes in the supplied slice as a little-endian
f64
. - le_i16
- Returns the first two bytes in the supplied slice as a little-endian
i16
. - le_i32
- Returns the first four bytes in the supplied slice as a little-endian
i32
. - le_i64
- Returns the first eight bytes in the supplied slice as a little-endian
i64
. - le_u16
- Returns the first two bytes in the supplied slice as a little-endian
u16
. - le_u32
- Returns the first four bytes in the supplied slice as a little-endian
u32
. - le_u64
- Returns the first eight bytes in the supplied slice as a little-endian
u64
.
Type Aliases§
- Extract
Result - The result of extracting a value from a stream of bytes.