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 #事务

Download history 6/week @ 2024-04-22 1/week @ 2024-05-20 5/week @ 2024-05-27 57/week @ 2024-07-29

每月下载量 57次
structsy_tools 中使用

MIT 许可证

315KB
7.5K SLoC

Structsy

build status coverage report

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