1 个不稳定版本
0.1.0 | 2024 年 1 月 24 日 |
---|
#1018 在 编码
32KB
790 行
塞瑞 - 无结构化的 Serde
注意
塞瑞的 API 和数据表示可能相对不稳定。它们可能受到破坏性更改的影响。
Serde 是一个非常好的库,但有时可能不令人满意 - 它要求你使用一个抽象但结构化的数据视图,这样它就可以被序列化为任何格式。
塞瑞不同 - 它是一个序列化和反序列化库,它明确地 不指定 为其消费者指定一个格式 - 它将序列化和反序列化的具体实现留给每个类型。塞瑞所做的只是提供一些常见的设施和工具来序列化数据。
用法
手动实现
在塞瑞中使用的最主要特质是 SerryRead
和 SerryWrite
特质。正如其名称所暗示的
数据表示
所有由塞瑞提供的表示都试图在一定程度上被非 Rust 程序解析。
整数
整数以小端形式表示(这可能会发生变化,但可能性不大)。
向量(对于 T
)
向量以一个 u64
开始,它确定其长度。然后,塞瑞将读取 n 个 T
到一个向量中。
HashMap(对于 K
和 V
)
HashMap 在内部表示为 (K, V)
的向量。这意味着你可以将编码数据解释为条目列表或键值映射。
请注意,塞瑞不保证元素顺序。如果需要可预测的顺序,请使用向量。
字符串
字符串实际上表示为 u8
的向量。它们以 UTF-8 编码。使用 Vec 和 Strings 之间的唯一区别是 String
保证有效的 UTF-8 字符串。
许可证
Copyright (c) 2023 tecc
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
依赖项
~1.5MB
~39K SLoC