5 releases
0.2.4 | Dec 31, 2023 |
---|---|
0.2.3 | Dec 3, 2023 |
0.1.1 | Dec 2, 2023 |
#243 in Data structures
17,108 downloads per month
Used in 13 crates
(via openraft)
37KB
943 lines
validit
Validate variable internal state when the variable is accessed.
- Implement trait
Validate
for a typeT
to define how to validate internal state ofT
. - Wrapper struct
Valid<T: Validate>
implementsDeref
andDerefMut
traits, and validates the internal state when the variable is accessed.
For example, If in your program you have a struct Foo(u64)
and you want to make sure
that a
is always less than to 5
, you can implement Validate
trait for Foo
and use
less!
macro to validate 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) ...
}
Contribution
- 🙌 Questions? Join the Discord channel or start a discussion.
Dependencies
~0–5MB
~13K SLoC