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

MIT 许可证

16KB
360

Cereal

一个简单的 cereal 化库。

工作原理

  • 原始类型是可序列化的(不包括切片/指针/引用等。此库用于处理原始数据)
  • 仅由原始类型组成的事物是可序列化的。
    • 使用 nightly 的 #[derive(CerealData)]
    • 或者在 stable 上使用 impl_cereal_data!
  • 可以表示为原始类型或其他可序列化类型的事物也是可序列化的
    • 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)。

无运行时依赖