6个版本
0.1.5 | 2024年5月20日 |
---|---|
0.1.4 | 2023年3月13日 |
0.1.3 | 2023年1月15日 |
#837 在 编码
每月 45次下载
在 2 个crates中使用 (via konsumer_offsets)
33KB
425 行
bytes_parser
一个简单的包装器,用于从字节数组中解析原始Rust类型 [u8]
它是用来做什么的?
如果你只需要解析一个定制的二进制协议,那么这个crate就是为你准备的。你提供一个字节的引用切片,并且假设你知道这些字节代表什么,从中读取原始值。
这个crate的核心是 BytesParser
,它遵循了一些原则
- 简单性:仅仅是一个字节数组的薄包装,带有游标来跟踪进度。
- 零拷贝:返回的要么是位复制的原始类型,要么是原始字节的引用——从不克隆。
- 仅原始类型:如果你需要序列化/反序列化复杂的数据结构,你可能需要 serde。
特性
- 解析所有原始 标量类型,有符号和无符号,以及
&str
和&[u8]
的子切片。 - 内部、自动更新的游标,以实现简单的扫描逻辑。
- 可以选择将游标任意、安全地沿输入切片移动。
- 支持端序选择(参见
ParsingEndian
)。 - 描述性错误(参见
BytesParserError
)。 - 最小依赖。
示例
use bytes_parser::{BytesParser, ParsingEndian};
let input: &[u8] = /* a slice of bytes from somewhere */;
// Crate a parser from a given slice of bytes
let mut parser = BytesParser::from(input);
// Will use Big-Endian parsing
assert_eq!(parser.endian(), ParsingEndian::BE);
assert_eq!(ParsingEndian::BE, ParsingEndian::default());
// Parse a string length and the string itself
let str_len = parser.parse_usize()?;
let str = parser.parse_str_utf8(str_len)?;
assert_eq!(str, "Forza Napoli Sempre!");
替代方案
许可证
根据以下任一许可证授权
- Apache许可证2.0版本(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的任何贡献,均应双重许可,如上所述,不附加任何额外条款或条件。
依赖
~275–730KB
~17K SLoC