6个版本
0.1.5 | 2023年3月20日 |
---|---|
0.1.4 | 2022年7月18日 |
#1245 在 数据库接口
每月 28 次下载
用于 leveldb-orm-derive
12KB
116 行
leveldb-orm
Leveldb的ORM包装器,为Rust leveldb KV API。使用 bincode 进行键和对象的编码/解码。
Rust版本策略
基于rust leveldb
leveldb
是在Rust的稳定版本上构建和测试的。当前是 1.31.0
和 1.43.1
。Nightly版本可能在任何时候都无法构建,并且允许失败。尽管如此,Nightly版本没有已知的问题。
先决条件
snappy
和 leveldb
需要安装。在Ubuntu上,我建议
sudo apt-get install libleveldb-dev libsnappy-dev
用法
结构体应该实现 Serialize
和 Deserialize
,因此我们需要 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