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 日

#1775Rust 模式


2 个 crate 中使用 (通过 loadstone_config)

MIT 许可协议

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);

上述定义了三种类型(LetterXorPairUsername),这些类型保证始终满足给定的条件。这是通过在构造后和每次变异后检查条件来强制执行的。

不可变地,有界类型将尽可能接近底层类型,实现所有典型 Newtype 包装器实现的特性。

有关更多详细信息,请参阅 文档

致谢 Orson Peters(Rust Discord 中的 orlp)为 Bound 特性的想法,这是此 crate 成长的种子。

注意

此 crate 提供了一种通用的解决方案。这意味着在可能的情况下,使用专门的限制类型可能更好(例如,标准库中的 NonZeroUSize 类型)。这些类型将进行进一步的专业化,提供性能和尺寸增益,实现更多特性,并在编译时做出更多决策。

如果您不太关心在每次变异后检查不变量的性能,生态系统中没有您想要的特定类型限制的替代品,或者您只需要快速方便的方法来保护您的类型,那么 tightness 可能适合您!

依赖关系

~320–780KB
~18K SLoC