2 个版本
0.1.2 | 2020年8月17日 |
---|---|
0.1.1 | 2020年4月1日 |
0.1.0 |
|
在 编码 中排名第 1698
180KB
6K SLoC
RusTT
TT是一种用于高效、快速序列化和反序列化数据的格式。TT可用于在进程之间或通过网络传输数据。TT设计用于不传输任何不必要的附加数据,并保持数据大小小,同时仍然易于机器读取。TT数据结构类似于键值格式,其中键可以是任何整数、字符串或字节序列。值可以是这些之一,也可以是序列或映射。
目前仅支持TTv3,因此所有编码/解码都将使用该版本进行。当支持其他版本时,将使用枚举 Version
来指定(反)序列化版本。
无类型TT值
在无法定义静态结构的情况下,有 ttv3::Key
和 ttv3::Value
。这些枚举定义了键和值的所有可能值。
由于TT可以具有浮点数作为键,它们将由 ttv3::serde::TtF32
或 ttv3::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