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 模式
270 每月下载量
用于 edsm-dumps-model
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