#data #tt #byte #key #deserialize #enums #ttv3

nightly rustt

一个用于高效传输自描述数据的Rust实现的线协议

2 个版本

0.1.2 2020年8月17日
0.1.1 2020年4月1日
0.1.0 2020年3月31日

编码 中排名第 1698

MIT 许可证

180KB
6K SLoC

RusTT

TT是一种用于高效、快速序列化和反序列化数据的格式。TT可用于在进程之间或通过网络传输数据。TT设计用于不传输任何不必要的附加数据,并保持数据大小小,同时仍然易于机器读取。TT数据结构类似于键值格式,其中键可以是任何整数、字符串或字节序列。值可以是这些之一,也可以是序列或映射。

目前仅支持TTv3,因此所有编码/解码都将使用该版本进行。当支持其他版本时,将使用枚举 Version 来指定(反)序列化版本。

无类型TT值

在无法定义静态结构的情况下,有 ttv3::Keyttv3::Value。这些枚举定义了键和值的所有可能值。

由于TT可以具有浮点数作为键,它们将由 ttv3::serde::TtF32ttv3::serde::TtF64 表示,这是一个围绕 u32 和 u64 的包装器,以便可以在 ttv3::Value::Map 中使用。这不是Rust通常的做法,并且仅在 ttv3::Value 中使用。

#
enum Key {
   	String(String),
   	Bytes(Vec<u8>),
   	I8(i8),
   	I16(i16),
   	I32(i32),
   	I64(i64),
   	U8(u8),
   	U16(u16),
   	U32(u32),
   	U64(u64),
   	Bool(bool),
   	F32(rustt::ttv3::TtF32),
   	F64(rustt::ttv3::TtF64),
}
#
enum Value {
   	String(String),
   	Bytes(Vec<u8>),
   	I8(i8),
   	I16(i16),
   	I32(i32),
   	I64(i64),
   	U8(u8),
   	U16(u16),
   	U32(u32),
   	U64(u64),
   	Bool(bool),
   	F32(rustt::ttv3::TtF32),
   	F64(rustt::ttv3::TtF64),
   	Map(std::collections::HashMap<Key, Value>),
   	Vec(Vec<Value>),
}

将TT作为强类型数据解析

Serde提供了用于序列化和反序列化数据结构的宏。Rust TT能够使用这些宏来完成serde_json等工具所能完成的所有操作。出于性能考虑,您应该使用serde_bytes来处理Vec<u8>[u8]。如果您不这样做,其他应用程序会将这些数据读取为字节数组,而不是字节数列。区别在于,在TT中,字节数列的编码方式与字符串相同,而字节数组的编码方式与其他数组相同。

版本

TT有多种版本。本软件包只支持ttv3,因为它是最新版本。任何即将到来的tt版本都将得到支持,这也是为什么有专门针对ttv3特定代码的模块。例如,`ttv3::Key`、`ttv3::Value`和`ttv3::Error`都是ttv3特有的(也许除了`ttv3::Error`),为了保持此软件包的向后兼容性,这些模块位于不同的子模块中。

依赖关系

~145–385KB