#类型 #哈希 #宏-derive #结构体 # #版本

type_hash

为 Rust 类型生成哈希。该库的主要用途是在库版本之间检测消息类型的差异。《TypeHash》特质为大多数内置类型实现,并提供一个 derive 宏,以实现它为您自己的类型。

5 个不稳定版本

0.3.0 2021 年 2 月 27 日
0.2.2 2021 年 1 月 4 日
0.2.1 2021 年 1 月 3 日
0.2.0 2021 年 1 月 3 日
0.1.0 2021 年 1 月 3 日

#2542 in Rust 模式

Download history 3/week @ 2024-03-26 25/week @ 2024-04-02 3/week @ 2024-04-09 8/week @ 2024-04-23 2/week @ 2024-05-14 3/week @ 2024-05-21 7/week @ 2024-05-28 6/week @ 2024-06-04 6/week @ 2024-06-11 1/week @ 2024-06-18 19/week @ 2024-06-25 107/week @ 2024-07-02 143/week @ 2024-07-09

270 每月下载量
用于 edsm-dumps-model

MIT 许可证

13KB
253

type_hash

为 Rust 类型生成哈希。

该库的主要用途是在库版本之间检测消息类型的差异。

《TypeHash》特质为大多数内置类型实现,并提供一个 derive 宏,以实现它为您自己的类型。

示例

use type_hash::TypeHash;

#[derive(TypeHash)]
pub enum Message {
    LaunchMissiles { destination: String },
    CancelMissiles,
}

fn main() {
    let hash = Message::type_hash();
    // this will only change if the type definition changes
    assert_eq!(hash, 11652809455620829461);
}

自定义 derive TypeHash 实现

#[type_hash(foreign_type)]

如果一个结构体字段具有未实现《TypeHash》特质的外部类型,您可以将其标记为外部类型,并使用该类型的名称代替其在哈希中的名称。在这里需要小心,因为第三方库的更改可能会以不可检测的方式更改您的类型。

#[derive(TypeHash)]
pub struct MyStruct {
    #[type_hash(foreign_type)]
    data: ArrayVec<[u16; 7]>
}

#[type_hash(skip)]

跳过字段,使其不包含在哈希中。

#[derive(TypeHash)]
pub struct MyStruct {
    #[type_hash(skip)]
    not_important: Vec<i64>,
}

#[type_hash(as= "...")]

将字段哈希为不同类型。这允许您将字段的类型更改为与您的应用程序兼容的不同类型,而不会影响哈希。

#[derive(TypeHash)]
pub struct MyStruct {
    #[type_hash(as = "HashSet<i64>")]
    numbers: BTreeSet<i64>,
}

依赖项

~1.5MB
~37K SLoC