3 个版本
0.1.2 | 2020年11月5日 |
---|---|
0.1.1 | 2020年10月21日 |
0.1.0 | 2020年10月18日 |
#2080 在 数据库接口
每月25 次下载
21KB
186 行
恐龙
Dino
是一个轻量级的 Rust 数据库!它使编写带类型的数据库更加容易。通常,如果您使用文件存储数据库,那么您将需要自己解析类型
恐龙使用 json,即您将拥有所有基本类型,如 bool,usize,str 等,特殊之一是 Tree。恐龙对树特别关注。因为一些数据库允许您打开树,但不能在那里打开子树。您可以轻松打开子树。以下是一些示例,展示了如何使用树以及如何在没有子树的情况下使用数据库;)
示例代码
基本数据库
// Create the database instance
let mut db = Database::new("./basic.dino");
// Load and create the database if does not exist
db.load();
// Insert values in the db in the format of key, value
db.insert("key-1", "value-1");
db.insert("key-2", "value-2");
子树
// Create the database instance
let mut db = Database::new("./sub_trees.dino");
// Load and create the database if does not exist
db.load();
// Create a new sub Tree in the main Tree of the db
let mut data_tree = Tree::new();
// Insert the key and value in the sub tree
data_tree.insert("a", "b");
// Insert the [data_tree] under the main tree
db.insert_tree("id", data_tree);
查询数据库
// Create the database instance
let mut db = Database::new("./basic.dino");
// Load and create the database if does not exist
db.load();
// Insert values in the db in the format of key, value
db.insert("key-1", "value-1");
// Print the value of `key-1`
println!("The value of key: id is {}", db.find("key-1").unwrap());
与 rocket.rs 一起使用
// Simple rocket route
#[get("/<id>")]
// Here we add the arg `db: State<dino::Database>`
// To get the db state that we passed before!
fn hello(db: State<dino::Database>, id: String) -> String {
// Now in this rocket route we take a id param
// We will extract the param to str
// Then check if it exists
match db.find(id.as_str()) {
// If it exists it will return Ok(value)
Ok(value) => {
// Then we can return the value!
return value.to_string();
}
// If it does not exists it gives a error
Err(error) => {
// So return the error!
// You might want to handle the error too!
return error;
}
}
}
fn main() {
// Create the database instance
let mut db = dino::Database::new("rocket.dino");
// Load and create the database if does not exist
db.load();
// Insert a key with a dummy value for now!
db.insert("key", "value!");
// Ignite the rocket and mount the routes
rocket::ignite()
.mount("/", routes![hello])
// Important part here!
// Here we pass the db state to rocket
// So we can access it when we go to any route.
.manage(db)
.launch();
}
贡献
贡献总是受欢迎!以下是一些您可以为恐龙做出贡献的方式
- 报告问题和错误
- 帮助我们完善文档
- 在恐龙中添加新功能并修复错误!
许可证
根据您的选择,受 Apache 许可证 2.0 版或 MIT 许可证的许可。除非您明确说明,否则您有意提交的任何贡献,根据 Apache-2.0 许可证定义,应按上述方式双重许可,而无需任何附加条款或条件。
依赖关系
~0.5–1MB
~20K SLoC