#delta #calculate #data #value #tree #definition #apply

deltoid

用于计算和将增量应用于结构和枚举的库

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 模式

Download history 35/week @ 2024-03-17 26/week @ 2024-03-24 73/week @ 2024-03-31 34/week @ 2024-04-07 33/week @ 2024-04-14 31/week @ 2024-04-21 38/week @ 2024-04-28 15/week @ 2024-05-05 8/week @ 2024-05-12 17/week @ 2024-05-19 26/week @ 2024-05-26 32/week @ 2024-06-02 47/week @ 2024-06-09 34/week @ 2024-06-16 10/week @ 2024-06-23 1/week @ 2024-06-30

98 每月下载量
2 个 crate 中使用 (通过 deltoid-derive)

MIT/Apache

185KB
5K SLoC

Deltoid

Rust

概要

Deltoid 是一个类型驱动的 Rust 库,可用于计算 增量。可以在相同类型的两个值 ab 之间计算增量 Δ。一旦计算出来,就可以将 Δ 应用到第一个值 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);
}

限制

此库有一些限制

  1. 不支持联合。目前仅支持 structenum

  2. 派生宏尝试适应泛型类型,但对于使用高级泛型的类型,通常建议手动实现而不是使用 deltoid-derive,因为它允许更细粒度的控制。

  3. 具有具有借用类型(即 &T&mut T 对于某些类型 T)的字段的类型目前不支持。此限制 可能 在未来解除对可变借用的限制,但对于不可变借用来说是非常基础的。

  4. 在开发过程中,您可能会发现Rust的stdlib中缺少一组impl。如果是这样,这是因为必须手动添加stdlib中的类型支持,而这还没有完成。您可以为此创建一个issue,或者更好的是,提交一个PR :)

特别感谢

特别感谢Accept B.V.对本项目的赞助。

依赖项

~0.4–8.5MB
~68K SLoC