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)
13KB
184 行
tarrasque
一个用于解析二进制格式的零分配库。
在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