5 个版本

0.2.4 2023 年 12 月 31 日
0.2.3 2023 年 12 月 3 日
0.1.1 2023 年 12 月 2 日

#231数据结构

Download history 6941/week @ 2024-03-13 6436/week @ 2024-03-20 5454/week @ 2024-03-27 5161/week @ 2024-04-03 4190/week @ 2024-04-10 3634/week @ 2024-04-17 5182/week @ 2024-04-24 4609/week @ 2024-05-01 6185/week @ 2024-05-08 4382/week @ 2024-05-15 4780/week @ 2024-05-22 4148/week @ 2024-05-29 4072/week @ 2024-06-05 4398/week @ 2024-06-12 4518/week @ 2024-06-19 5650/week @ 2024-06-26

19,510 每月下载量
6 个 crate 中使用 (通过 openraft)

MIT/Apache

37KB
943

validit

Discord Chat Crates.io docs.rs Crates.io Crates.io

在访问变量时验证变量内部状态。

  • 为类型 T 实现 Validate trait 以定义如何验证 T 的内部状态。
  • 包装结构 Valid<T: Validate> 实现 DerefDerefMut trait,并在访问变量时验证内部状态。

例如,如果您的程序中有一个结构 Foo(u64),并且您想确保 a 总是小于 5,则可以实现对 FooValidate 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) ...
}

贡献

依赖关系

~0–690KB
~14K SLoC