4 个版本 (2 个破坏性更新)
使用旧的 Rust 2015
0.3.0 | 2017年2月23日 |
---|---|
0.2.0 | 2017年2月15日 |
0.1.1 | 2017年1月17日 |
0.1.0 | 2016年12月21日 |
#119 in #in-memory
125KB
3.5K SLoC
Arthas 是一个内存结构数据库。
使用方法
-
将依赖项添加到
Cargo.toml
。[dependencies] arthas = "^0.3" arthas_derive = "^0.1" serde_derive = "^0.9"
-
在你的
main.rs
或lib.rs
extern crate arthas; #[macro_use] extern crate arthas_derive; #[macro_use] extern crate serde_derive;
-
将 "#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize, Arthas)]" 属性添加到你的结构体中。
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize, Arthas)] pub struct Article { pub _id: String, // If you want to use id. add a field named `_id`. pub title: String, pub content: String, pub views: usize, }
CRUD 示例
所有结构体都可以使用静态方法 session()
。 session()
将返回一个 Query
。
extern crate arthas;
#[macro_use]
extern crate arthas_derive;
#[macro_use]
extern crate serde_derive;
use arthas::prelude::*;
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize, Arthas)]
pub struct Article {
pub _id: String,
pub title: String,
pub content: String,
pub views: usize,
}
impl Article {
pub fn new<T: Into<String>>(title: T) -> Article {
Article { title: title.into(), ..Default::default() }
}
}
fn main() {
// Disable persistence for the tests.
arthas::config::persistence(false);
// Insert
let id = Article::session().insert(Article::new("Hello world!")).unwrap();
// Update
Article::session().id(&id).update(|article| article.views = 10).unwrap();
// Find
let items = Article::session().find().unwrap();
assert!(items.len() > 0);
// Find One
let item = Article::session().id(&id).find_one().unwrap();
assert!(item.is_some());
assert_eq!(item.unwrap().title, "Hello world!");
// Remove
Article::session().id(&id).remove().unwrap();
}
加载持久化
Arthas 不会自动从磁盘加载持久化,你必须自己加载持久化。
arthas::load::<Article>(); // Load `Article`'s persistence.
更新结构
有时你可能想更新你的结构。比如重命名或删除字段。Arthas 会自动删除和添加字段,但你必须告诉 Arthas 如果你想要 重命名 字段。
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize, Arthas)]
#[arthas(rename = "content = body, views = visit")] // Use `#[arthas]` attribute.
pub struct Article {
pub _id: String,
pub title: String,
pub body: String, // This is the field renamed from `content`
pub visit: usize, // This is the field renamed from `views`
}
依赖项
~9.5MB
~162K SLoC