29 个版本
0.12.0 | 2023 年 7 月 2 日 |
---|---|
0.11.3 | 2021 年 6 月 1 日 |
0.10.0 | 2021 年 3 月 27 日 |
0.8.2 | 2020 年 12 月 25 日 |
0.3.0 | 2020 年 3 月 12 日 |
#592 in Rust 模式
98 每月下载量
在 2 个 crate 中使用 (通过 deltoid-derive)
185KB
5K SLoC
Deltoid
概要
Deltoid 是一个类型驱动的 Rust 库,可用于计算 增量。可以在相同类型的两个值 a
和 b
之间计算增量 Δ
。一旦计算出来,就可以将 Δ
应用到第一个值 a
上,以获得一个与第二个值 b
等效的新值 c
。
计算增量的一项主要用途是在保持资源消耗(例如 RAM、网络带宽)合理的同时跟踪一系列相关且可能深度嵌套的数据树。由于此类序列可能被导出以进行进一步处理,增量按定义是可序列化和反序列化的。这允许您将数据作为一系列增量收集在一个地方,导出它(可能通过网络连接),然后在接收端通过连续应用序列中的增量来重建原始序列。
用法
将此添加到您的 Cargo.toml
[dependencies]
deltoid = "0.11.1"
deltoid-derive = "0.11.1"
计算增量,然后应用它
use deltoid::Deltoid;
use serde_derive::{Deserialize, Serialize};
#[derive(Deserialize, Serialize, Deltoid)]
struct Point {
x: usize,
y: usize,
}
fn main() {
// Define 2 instances of the same type
let point0 = Point { x: 0, y: 0 };
let point1 = Point { x: 42, y: 8 };
// Calculate the delta between them
let delta = point0.delta(&point1).unwrap();
// Apply the delta to `point0`
let point2 = point0.apply(delta).unwrap();
assert_eq!(point1, point2);
}
限制
此库有一些限制
-
不支持联合。目前仅支持
struct
和enum
。 -
派生宏尝试适应泛型类型,但对于使用高级泛型的类型,通常建议手动实现而不是使用
deltoid-derive
,因为它允许更细粒度的控制。 -
具有具有借用类型(即
&T
和&mut T
对于某些类型T
)的字段的类型目前不支持。此限制 可能 在未来解除对可变借用的限制,但对于不可变借用来说是非常基础的。 -
在开发过程中,您可能会发现Rust的
stdlib
中缺少一组impl。如果是这样,这是因为必须手动添加stdlib
中的类型支持,而这还没有完成。您可以为此创建一个issue,或者更好的是,提交一个PR :)
特别感谢
特别感谢Accept B.V.对本项目的赞助。
依赖项
~0.4–8.5MB
~68K SLoC