6 releases
Uses new Rust 2024
| 0.2.5 | Dec 24, 2025 |
|---|---|
| 0.2.4 | Dec 31, 2023 |
| 0.1.1 | Dec 2, 2023 |
#185 in Data structures
32,809 downloads per month
Used in 33 crates
(via openraft)
38KB
979 lines
validit
Validate variable internal state when the variable is accessed.
- Implement trait
Validatefor a typeTto define how to validate internal state ofT. - Wrapper struct
Valid<T: Validate>implementsDerefandDerefMuttraits, 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–0.8MB
~17K SLoC