2017-07-30 15 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]>, 

それはAsRef<[u8]>を実装していないので、私は、データベースにMyEnum::Aを入れるにはどうすればよいですか?

データをJSONに変換してJSONをデータベースに書き込むことはできますが、これはパフォーマンスが低下します。

答えて

3

あなたは内部列挙型の実装とStringは錆のバージョン間で安定ではないかもしれないので、あなたが直接(データベースにメモリにMyEnumを表すビットを置くことができないので、一部シリアル化形式を使用する必要があり、少なくともStringますポインタを内部的に使用します)。

JSONを特に使用する必要はありません。 (JSONは実際には非常に非効率的です)serde(これはRustの事実上の型指向直列化ライブラリのようです)でサポートされているものを選ぶことができます。

関連する問題