5 个版本 (2 个稳定版)
1.0.1 | 2021 年 5 月 30 日 |
---|---|
0.1.2 | 2021 年 5 月 30 日 |
0.1.1 | 2021 年 5 月 30 日 |
0.1.0 | 2021 年 5 月 30 日 |
#1775 在 Rust 模式
在 2 个 crate 中使用 (通过 loadstone_config)
21KB
235 行
Tightness
此库提供了一种方便的方法来定义受任意条件约束的类型。
bound!(pub Letter: char where |c| c.is_alphabetic());
bound!(XorPair: (bool, bool) where |(a, b)| a ^ b);
bound!(Username: String where |s| s.len() < 8);
上述定义了三种类型(Letter
、XorPair
和 Username
),这些类型保证始终满足给定的条件。这是通过在构造后和每次变异后检查条件来强制执行的。
不可变地,有界类型将尽可能接近底层类型,实现所有典型 Newtype
包装器实现的特性。
有关更多详细信息,请参阅 文档!
致谢 Orson Peters(Rust Discord 中的 orlp
)为 Bound
特性的想法,这是此 crate 成长的种子。
注意
此 crate 提供了一种通用的解决方案。这意味着在可能的情况下,使用专门的限制类型可能更好(例如,标准库中的 NonZeroUSize
类型)。这些类型将进行进一步的专业化,提供性能和尺寸增益,实现更多特性,并在编译时做出更多决策。
如果您不太关心在每次变异后检查不变量的性能,生态系统中没有您想要的特定类型限制的替代品,或者您只需要快速方便的方法来保护您的类型,那么 tightness
可能适合您!
依赖关系
~320–780KB
~18K SLoC