将字符串或枚举放入 LMDB

Putting strings or enums into LMDB

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

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 写入数据库,但这会降低性能。

你将不得不使用一些序列化格式,因为你不能直接将内存中代表MyEnum的位放入数据库(因为枚举和String 在 Rust 版本中可能不稳定,String 至少在内部使用指针)。

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