1 个不稳定版本
0.1.0 | 2022年8月29日 |
---|
#1768 在 数据结构
15KB
133 行
关于
TypedId
引入了一个单一的类型,恰如其名,即TypedId
。这是一个泛型包装器,可以用于任何类型,通常是作为标识符使用的类型。然而,TypedId
的每个实例都有一个自由泛型参数,您可以使用它将ID类型关联到给定的结构(或结构集合)。
这允许您在编译时具有额外的一层类型检查安全性,在运行时消失!您可以让所有类型使用相同的底层结构作为它们的标识符,而无需担心它们之间的交换。
工作原理
TypedId
非常独特地向前工作。使用它们的最简单方法是声明自己的使用TypedId
的类型。例如,
use typed_id::TypedId;
pub stuct Customer {
id: CustomerId,
/* Likely other fields */
}
pub type CustomerId = TypedId<u32, Customer>;
就这么简单!如果您有其他需要ID的类型,只需添加另一个类型和TypedId
将为您处理所有样板代码!
注意,TypedId
有一个对serde
的可选依赖。启用时,这将添加一个有意见的(反)序列化实现。此实现(反)序列化一个TypedId
为其底层类型。
为什么使用
Rust有一个非常强大的类型系统,具有许多惊人的特性。它利用这个系统来防止简单的错误,例如向函数传递错误的类型。
贡献
如果您想为此库做出贡献或对其进行改进,请这样做。分叉此项目或提交一个功能/修复/更改等的issue或pull request。我唯一的要求是派生的/迭代库是开源的,可以免费使用,并最好使用相同的许可证(LGPL v2.1)。任何使用此库的应用或库都可以使用任何许可证。
依赖
~175KB