Crates.io | validit |
lib.rs | validit |
version | 0.2.4 |
source | src |
created_at | 2023-12-02 16:18:47.715447 |
updated_at | 2023-12-31 01:22:24.00348 |
description | Validate data structures internal state |
homepage | https://github.com/drmingdrmer/validit |
repository | https://github.com/drmingdrmer/validit |
max_upload_size | |
id | 1056220 |
size | 56,006 |
Validate variable internal state when the variable is accessed.
Validate
for a type T
to define how to validate internal state of T
.Valid<T: Validate>
implements Deref
and DerefMut
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) ...
}