6个版本

0.1.5 2023年3月20日
0.1.4 2022年7月18日

#1245数据库接口

每月 28 次下载
用于 leveldb-orm-derive

MIT 许可证

12KB
116

leveldb-orm

Leveldb的ORM包装器,为Rust leveldb KV API。使用 bincode 进行键和对象的编码/解码。

Rust版本策略

基于rust leveldb

leveldb是在Rust的稳定版本上构建和测试的。当前是 1.31.01.43.1。Nightly版本可能在任何时候都无法构建,并且允许失败。尽管如此,Nightly版本没有已知的问题。

先决条件

snappyleveldb需要安装。在Ubuntu上,我建议

sudo apt-get install libleveldb-dev libsnappy-dev

用法

结构体应该实现 SerializeDeserialize,因此我们需要 serde

通过 进行推导

[dependencies]
leveldb = "0.8"
leveldb-orm = { version = "0.1", features = ["macros"]}
serde = { version = "1.0", features = ["derive"] }

然后,在你的 main.rs 中

示例

use leveldb::database::Database;
use leveldb::options::Options;
use leveldb_orm::{KVOrm, KeyOrm, LeveldbOrm};
use serde::{Deserialize, Serialize};

#[derive(LeveldbOrm, Serialize, Deserialize)]
#[leveldb_key(executable, args)]
pub struct Command {
    pub executable: u8,
    pub args: Vec<String>,
    pub current_dir: Option<String>,
}

fn main() {
    let cmd = Command {
        executable: 1,
        args: vec!["arg1".into(), "arg2".into(), "arg3".into()],
        current_dir: Some("\\dir".into()),
    };

    let mut options = Options::new();
    options.create_if_missing = true;
    let database = Database::open(std::path::Path::new("./mypath"), options).unwrap();

    cmd.put(&database).unwrap();

    let key = Command::encode_key((&cmd.executable, &cmd.args)).unwrap();
    // or `let key = cmd.key().unwrap();`
    Command::get(&database, &key).unwrap();

    Command::delete(&database, false, &key).unwrap();
}

没有 功能

只需手动实现 KeyOrm 特性。

测试

  • cargo test
  • cargo test --features "macros"

依赖关系

~2–2.9MB
~56K SLoC