2个不稳定版本
| 0.2.0 | 2020年2月20日 | 
|---|---|
| 0.1.0 | 2020年2月15日 | 
#143 in #encode-decode
在nimble中使用
25KB
471 行
Nimble
Rust中的异步友好、简单快速的二进制编码/解码。
二进制编码方案
此crate使用最小化二进制编码方案。例如,考虑以下struct
struct MyStruct {
    a: u8,
    b: u16,
}
encode()将序列化为大小为Vec的3(这是u8和u16的大小之和)。
类似地,对于可以具有动态大小的类型(Vec、String等),encode()将编码值的长度作为u64前缀。
使用方法
在Cargo.toml的dependencies部分添加nimble
[dependencies]
nimble = { version = "0.2", features = ["derive"] }
或者,如果你在一个基于tokio的环境中,可以使用
[dependencies]
nimble = { version = "0.2", default-features = false, features = ["derive", "tokio"] }
对于编码和解码,任何类型都必须实现此crate提供的两个特型,即Encode和Decode。为了方便,nimble提供了derive宏(仅在启用"derive"功能时)来实现这些特型。
use nimble::{Encode, Decode};
#[derive(Encode, Decode)]
struct MyStruct {
    a: u8,
    b: u16,
}
现在你可以使用encode()和decode()函数来编码和解码MyStruct的值。此外,你还可以使用MyStruct::encode_to()函数将值直接编码到实现AsyncWrite的类型,以及使用MyStruct::decode_from()函数将值直接从实现AsyncRead的类型解码。
注意:此crate暴露的大多数函数都是
async函数,并返回Future值。因此,您需要一个执行器来驱动从这些函数返回的Future。async-std和tokio是两个流行的选择。
功能
- futures:当您想使用- futures的- AsyncRead/- AsyncWrite特质来实现- Encode和- Decode时,选择此功能。- 默认启用。
 
- tokio:当您想使用- tokio的- AsyncRead/- AsyncWrite特质来实现- Encode和- Decode时,选择此功能。- 默认禁用。
 
- derive:启用用于实现- Encode和- Decode特质的derive宏。- 默认禁用。
 
注意:功能
futures和tokio是互斥的,即一次只能启用其中一个。如果两个都启用或都没有启用,编译将失败。
许可证
许可协议为以下之一:
- Apache License,版本2.0(LICENSE-APACHE)
- MIT许可证(LICENSE-MIT)
任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您提交给作品的所有贡献,均应按上述方式双许可,不附加任何额外条款或条件。
依赖关系
~1.5MB
~36K SLoC