1 个不稳定版本

0.1.0 2022年8月29日

#1768数据结构

LGPL-2.1

15KB
133

Crates.io Documentation GitHub Workflows Coverage Status Maintenance

关于

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