#encode-decode #binary #decode #encode #serialization #deserialize

nimble-derive

异步友好,简单快速的二进制编码/解码

2个不稳定版本

0.2.0 2020年2月20日
0.1.0 2020年2月15日

#143 in #encode-decode


nimble中使用

MIT/Apache

25KB
471

Nimble

Rust中的异步友好、简单快速的二进制编码/解码。

二进制编码方案

此crate使用最小化二进制编码方案。例如,考虑以下struct

struct MyStruct {
    a: u8,
    b: u16,
}

encode()将序列化为大小为Vec3(这是u8u16的大小之和)。

类似地,对于可以具有动态大小的类型(VecString等),encode()将编码值的长度作为u64前缀。

使用方法

Cargo.tomldependencies部分添加nimble

[dependencies]
nimble = { version = "0.2", features = ["derive"] }

或者,如果你在一个基于tokio的环境中,可以使用

[dependencies]
nimble = { version = "0.2", default-features = false, features = ["derive", "tokio"] }

对于编码和解码,任何类型都必须实现此crate提供的两个特型,即EncodeDecode。为了方便,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值。因此,您需要一个执行器来驱动从这些函数返回的Futureasync-stdtokio是两个流行的选择。

功能

  • futures:当您想使用futuresAsyncRead/AsyncWrite特质来实现EncodeDecode时,选择此功能。
    • 默认启用。
  • tokio:当您想使用tokioAsyncRead/AsyncWrite特质来实现EncodeDecode时,选择此功能。
    • 默认禁用。
  • derive:启用用于实现EncodeDecode特质的derive宏。
    • 默认禁用。

注意:功能futurestokio是互斥的,即一次只能启用其中一个。如果两个都启用或都没有启用,编译将失败。

许可证

许可协议为以下之一:

任选其一。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您提交给作品的所有贡献,均应按上述方式双许可,不附加任何额外条款或条件。

依赖关系

~1.5MB
~36K SLoC