9 个版本 (5 个重大更新)

0.5.0 2021年3月19日
0.4.0 2021年3月2日
0.3.0 2021年2月28日
0.2.0 2021年2月27日
0.0.0 2020年9月8日

#4 in #connected

每月下载量:37
用于 cr-tools

AGPL-3.0-or-later

41KB
699

libocc-rs

dependency status

本库旨在为开发基于事件的偶尔连接计算体验提供简单接口。

libocc-ts(libocc 的 TypeScript 版本)的移植版

查看文档:https://docs.rs/libocc/

查看下面的 待办事项部分

示例

fn test_projector() {
    // Create a new book
    let mut my_book = book::Book {
        uuid: Uuid::new_v4(),
        some_number: 42,
        author: person::Person {
            uuid: Uuid::new_v4(),
            first_name: String::from("Alex"),
            last_name: String::from("Example"),
        },
    };

    // Create a new projector of type `Book`
    let mut books = crate::Projector::<book::Book>::new();

    // So far, the projector is empty.
    println!("Empty projector:");
    println!("{:?}\n", books.get_projection());
    assert_eq!(books.get_projection().len(), 0);

    // Add a new book
    books
        .push(crate::Event::create(Cow::Owned(my_book.clone())))
        .unwrap();

    // The projector now contains the new book in its initial state
    println!("Projector after creating new book:");
    println!("{:?}\n", books.get_projection());
    assert_eq!(books.get_projection().get(0).unwrap().some_number, 42);

    // This timestamp will be used in the future to get a previous state of the book
    let timestamp: crate::Timestamp = Utc::now();

    // Some time later ... (simulated delay)
    thread::sleep(time::Duration::from_millis(1));

    // Modify the book and save it in the projector
    my_book.some_number = 123;
    books
        .push(crate::Event::update(Cow::Borrowed(&my_book)))
        .unwrap();

    // The projector now contains the new version of the book
    println!("Projector after updating the book:");
    println!("{:?}\n", books.get_projection());
    assert_eq!(books.get_projection().get(0).unwrap().some_number, 123);

    // We can still retrieve the old version of the book (using the timestamp)
    println!("Projector before the book was updated:");
    println!("{:?}\n", books.project_at(&timestamp));
    assert_eq!(
        books
            .project_at(&timestamp)
            .unwrap()
            .get(0)
            .unwrap()
            .some_number,
        42
    );
}

待办

  • 数据模型
    • 实现自我描述的哈希值
      • 可能使用多格式
  • 实现某种类型的同步服务器
    • 决定如何处理持久性
      • 可能使用 SQL 数据库(PostgreSQL)
      • 可能使用 SQLite
      • 可能使用 Rust 原生存储格式
    • 实现通信
      • 基于 HTTP 的 RESTful API
  • 未来功能
    • 自定义数据模型(JSON 选项)
      • 实现 Serde 序列化器
      • 实现 Serde 反序列化器
    • 可能一些 WebSocket 功能?
    • 使用 Git 仓库进行持久化
    • 支持增量更新

版权(c)2020-2021 Bernd-L。保留所有权利。

AGPL v3: Free as in Freedom

libocc-rs 是自由软件:您可以在自由软件基金会发布的 GNU Affero 通用公共许可证的条款和条件下重新分发和/或修改它,许可证版本为 3 或(根据您选择)任何更高版本。

libocc-rs 以希望它将是有用的,但没有任何保证;甚至没有关于其适销性或适用于特定用途的暗示保证。有关详细信息,请参阅 GNU Affero 通用公共许可证。

您应该已收到 libocc-rs 一起的 GNU Affero 通用公共许可证副本。如果没有,请参阅 https://www.gnu.org/licenses/

本项目(包括其源代码和其文档)是根据 GNU Affero 通用公共许可证条款发布的。

依赖关系

~1.7–2.6MB
~50K SLoC