5 个版本
0.2.4 | 2023 年 12 月 31 日 |
---|---|
0.2.3 | 2023 年 12 月 3 日 |
0.1.1 | 2023 年 12 月 2 日 |
#231 在 数据结构
19,510 每月下载量
在 6 个 crate 中使用 (通过 openraft)
37KB
943 行
validit
在访问变量时验证变量内部状态。
- 为类型
T
实现Validate
trait 以定义如何验证T
的内部状态。 - 包装结构
Valid<T: Validate>
实现Deref
和DerefMut
trait,并在访问变量时验证内部状态。
例如,如果您的程序中有一个结构 Foo(u64)
,并且您想确保 a
总是小于 5
,则可以实现对 Foo
的 Validate
trait 的实现,并使用 less!
宏来验证 a
。
struct Foo(u64);
impl validit::Validate for Foo {
fn validate(&self) -> Result<(), Box<dyn std::error::Error>> {
validit::less!(self.0, 5);
Ok(())
}
}
fn main() {
let v1 = Valid::new(Foo(1));
let _x = v1.0; // Good.
let v6 = Foo(6);
let _x = v6.0; // No panic without validation.
let v6 = Valid::new(Foo(6));
let _x = v6.0; // panic: panicked at 'invalid state: expect: self.0(6) < 5(5) ...
}
贡献
- 🙌 有问题?加入 Discord 频道 或开始一个 讨论。
依赖关系
~0–690KB
~14K SLoC