2017-07-30 36 views
2

我想用the lmdb crate将一些数据写入我的数据库。我写一个枚举:将字符串或枚举放入LMDB中

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

lmdb::RwTransactionput功能如下定义:

fn put<K, D>(
    &mut self, 
    database: Database, 
    key: &K, 
    data: &D, 
    flags: WriteFlags, 
) -> Result<()> 
where 
    K: AsRef<[u8]>, 
    D: AsRef<[u8]>, 

如何把MyEnum::A到数据库中,因为它没有实现AsRef<[u8]>

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

回答

3

你将不得不使用一些序列化格式,因为你不能直接把在内存代表MyEnum位到数据库(因为枚举和内部实现String可能不跨越锈版本稳定,String至少内部使用指针)。

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