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
41KB
699 行
libocc-rs
本库旨在为开发基于事件的偶尔连接计算体验提供简单接口。
libocc-ts(libocc 的 TypeScript 版本)的移植版
查看下面的 待办事项部分。
示例
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(×tamp));
assert_eq!(
books
.project_at(×tamp)
.unwrap()
.get(0)
.unwrap()
.some_number,
42
);
}
待办
- 数据模型
- 实现自我描述的哈希值
- 可能使用多格式
- 实现自我描述的哈希值
- 实现某种类型的同步服务器
- 决定如何处理持久性
- 可能使用 SQL 数据库(PostgreSQL)
- 可能使用 SQLite
- 可能使用 Rust 原生存储格式
- 实现通信
- 基于 HTTP 的 RESTful API
- 决定如何处理持久性
- 未来功能
- 自定义数据模型(JSON 选项)
- 实现 Serde 序列化器
- 实现 Serde 反序列化器
- 可能一些 WebSocket 功能?
- 使用 Git 仓库进行持久化
- 支持增量更新
- 自定义数据模型(JSON 选项)
许可证 & 版权
版权(c)2020-2021 Bernd-L。保留所有权利。
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