Crate tarrasque

Crate tarrasque 

Source
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 optionally Span) for that struct.

Structs§

Stream
A stream of bytes from which values can be extracted.
UnwrapStream
A Stream wrapper that unwraps extracted values.
View
A slice of bytes containing values that span a fixed number of bytes.
ViewIter
An iterator over the values in a View.

Enums§

Endianness
A byte order.
ExtractError
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§

ExtractResult
The result of extracting a value from a stream of bytes.