将字符串或枚举放入LMDB

时间:2017-07-30 10:44:09

标签: serialization rust traits lmdb

我想使用the lmdb crate将一些数据写入我的数据库。我正在写一个枚举:

enum MyEnum {
    A { astr: String, bstr: String },
    B { i: u32 },
    C,
}

put的{​​{1}}函数具有以下定义:

lmdb::RwTransaction

如何将fn put<K, D>( &mut self, database: Database, key: &K, data: &D, flags: WriteFlags, ) -> Result<()> where K: AsRef<[u8]>, D: AsRef<[u8]>, 放入数据库,因为它没有实现MyEnum::A

我可以将数据转换为JSON并将该JSON写入数据库,但这会降低性能。

1 个答案:

答案 0 :(得分:3)

您必须使用某些序列化格式,因为您无法直接将代表MyEnum的位放入内存中(因为枚举的内部实现和String在Rust版本中可能不稳定,String至少在内部使用指针。

您不必专门使用JSON。 (JSON确实非常低效。)你可以选择serde支持的其他内容(这似乎是Rust的事实上的类型导向的序列化库)。