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) ...
}- 🙌 Questions? Join the Discord channel or start a discussion.