9个不稳定版本
0.5.2 | 2023年4月29日 |
---|---|
0.5.1 | 2023年1月8日 |
0.4.1 | 2022年9月11日 |
0.4.0 | 2021年10月4日 |
0.1.0 | 2019年9月14日 |
#1 in #事务
每月下载量 57次
在 structsy_tools 中使用
315KB
7.5K SLoC
Structsy
Structsy 是一个简单的单文件嵌入式结构体数据库,支持事务。
范围
此项目旨在展示一些创新的方式来使用Rust持久化和查询数据,同时为小型Rust项目提供一个有用的嵌入式数据库。
目标
Mastodon
Matrix聊天
https://www.structsy.rs
编译源代码
检出源代码
git clone https://gitlab.com/tglman/structsy.git
编译和测试
cargo test
安装
将其添加为项目的依赖项
[dependencies]
structsy="0.4"
用法示例
持久化一个简单的结构体。
use structsy::{Structsy, StructsyError, StructsyTx};
use structsy_derive::{queries, Persistent};
#[derive(Persistent, Debug, PartialEq)]
struct MyData {
#[index(mode = "cluster")]
name: String,
address: String,
}
#[queries(MyData)]
trait MyDataQuery {
/// The parameters name have two match the field names and type
/// like the `address` parameter match the `address` field of the struct.
fn search(self, address: String) -> Self;
}
fn main() -> Result<(), StructsyError> {
let db = Structsy::open("example_basic_query.db")?;
db.define::<MyData>()?;
let my_data = MyData {
name: "Structsy".to_string(),
address: "https://gitlab.com/tglman/structsy".to_string(),
};
let mut tx = db.begin()?;
let _id = tx.insert(&my_data)?;
tx.commit()?;
let to_find = "https://gitlab.com/tglman/structsy".to_string();
let mut iter = db.query::<MyData>().search(to_find.clone()).into_iter();
let (_id, data) = iter.next().unwrap();
assert_eq!(data.address, to_find);
Ok(())
}
依赖项
~1.7–2.7MB
~53K SLoC