5 个版本
0.2.0 | 2023 年 6 月 11 日 |
---|---|
0.1.3 | 2023 年 1 月 16 日 |
0.1.2 | 2023 年 1 月 16 日 |
0.1.1 | 2023 年 1 月 16 日 |
0.1.0 | 2023 年 1 月 15 日 |
#15 in #guid
每月 25 次下载
19KB
340 行
typed-uuid
Id
是对 uuid::Uuid
的泛型包装器。
使用它来添加类型安全,并防止不同类型的 Uuid 之间的混淆。
示例
表示不同类型的 Id 以防止混淆或无效状态。例如,描述一个唯一资源与另一个资源的关系,例如 User
的 Role
,关系可以表示如下
// Subtype the Id type to specify the version of the Id, instead
// of repeating yourself everywhere.
type Id<T> = typed_uuid::Id<T, typed_uuid::V4>;
struct Relation {
user: Id<User>,
role: Id<Role>,
}
不同 T
参数类型的 Id
是不兼容的,不能进行比较。
尝试将 Id<User>
赋值给类型为 Id<Role>
的变量会导致编译错误。
let user = Id::<User>::new();
let role = Id::<Role>::new();
// Compilation fails here, can't compare Id<User> and Id<Role>
assert_eq!(user, role);
但相同类型的 Id
可以正常工作
let mut first = Id::<User>::new();
let second = Id::<User>::new();
first = second;
assert_eq!(first, second);
用法
当你依赖这个库时,你需要显式选择你将使用的 uuid 版本,以及可选的 serde
支持
[dependencies.typed-uuid]
version = "*"
default-features = false
features = ["v4", "serde"]
依赖项
~210–540KB
~10K SLoC