#extract #zero-allocation #binary #parser #format #endianness #tarrasque

tarrasque-macro

一个用于解析二进制格式的零分配库

5个版本 (破坏性更新)

0.10.0 2019年1月1日
0.9.0 2018年12月27日
0.8.0 2018年12月24日
0.7.0 2018年12月11日
0.6.0 2018年12月8日

#24 in #zero-allocation

每月40次下载
3个crate中使用(通过tarrasque

Apache-2.0

13KB
184

tarrasque

crates.io docs.rs travis-ci.com

一个用于解析二进制格式的零分配库。

在Apache License 2.0下发布。

支持Rust 1.31.0及以后版本。

示例

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)));
}

依赖项

~2MB
~45K SLoC