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