7 个版本
使用旧的 Rust 2015
0.3.1 | 2016年1月1日 |
---|---|
0.3.0 | 2015年10月3日 |
0.2.2 | 2015年8月22日 |
0.2.1 | 2015年7月26日 |
0.1.0 | 2015年5月26日 |
#2426 in Rust 模式
用于 ecs
16KB
360 行
Cereal
一个简单的 cereal 化库。
工作原理
- 原始类型是可序列化的(不包括切片/指针/引用等。此库用于处理原始数据)
- 仅由原始类型组成的事物是可序列化的。
- 使用 nightly 的
#[derive(CerealData)]
- 或者在 stable 上使用
impl_cereal_data!
- 使用 nightly 的
- 可以表示为原始类型或其他可序列化类型的事物也是可序列化的
String
Vec<CerealData>
、HashMap<CerealData,CerealData>
以及其他我想到的集合。
- 空事物是可序列化的。
()
PhantomData<T> whereT:CerealData
如何使用它
1. 在 Cargo.toml 中添加
[dependencies]
# ...Other dependencies...
cereal = "*"
或者如果你在 nightly 上,你可能想包含 cereal_macros
[dependencies]
# ...Other dependencies...
cereal = "*"
cereal_macros = "*"
2. 为你的类型实现 CerealData
Nightly
#[derive(CerealData)]
struct MyAwesomeStruct {
field1: u32,
field2: String,
field3: AnotherAwesomeStruct,
}
Stable
struct MyAwesomeStruct {
field1: u32,
field2: String,
field3: AnotherAwesomeStruct,
}
impl_cereal_data!(MyAwesomeStruct, field1, field2, field3);
是的,你必须写出每个字段。虽然有点烦人,但至少你可以说,即使我忘记更新编译器更改的语法扩展,你的代码仍然会继续工作。
3. 创建你的类型
let my_awesome_instance = MyAwesomeStruct {
// ...
};
4. 获取写入器
let a_writer: &mut Write = /* ... */;
5. 写入
my_awesome_instance.write(a_writer);
6. 停止编译器关于未使用结果的尖叫
-- my_awesome_instance.write(a_writer);
++ my_awesome_instance.write(a_writer).unwrap();
7. 获取读取器
let a_reader: &mut Read = /* ... */;
8. 读取
let my_awesome_instance_2 = MyAwesomeStruct::read(a_reader).unwrap();
关于枚举的简要说明
从 v0.2.0 开始,你现在可以在具有元组和结构体变体的枚举上使用
#[derive(CerealData)]
。然而,目前稳定/测试频道上没有可用的宏。这可能可行,但需要一些时间。
如果它吃了我的衣服怎么办?
这个库本质上是二叉树(二进制数据吞噬者),但是给它喂不健康的数据可能会导致它变成洗衣吞噬者。
您已被警告
如果您遇到任何问题或缺少袜子,请在问题跟踪器上创建一个问题,或者如果我在那里,请通过 #rust-gamedev
ping 我(昵称是 HeroesGrave
)。