我想使用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写入数据库,但这会降低性能。
答案 0 :(得分:3)
您必须使用某些序列化格式,因为您无法直接将代表MyEnum
的位放入内存中(因为枚举的内部实现和String
在Rust版本中可能不稳定,String
至少在内部使用指针。
您不必专门使用JSON。 (JSON确实非常低效。)你可以选择serde支持的其他内容(这似乎是Rust的事实上的类型导向的序列化库)。