facet-validate
facet-validate adds field validation to the facet deserialization pipeline.
Validators run during deserialization, so errors carry the source span pointing
to the exact location in the input (e.g. the offending JSON field) rather than
surfacing after the fact.
rust
use facet:: Facet ;
use facet_validate as validate;
fn validate_positive ( n : & i64 ) -> Result <(), String > {
if * n <= 0 {
Err ( format! ( "must be positive, got {}" , n))
} else {
Ok (())
}
}
# [ derive ( Facet )]
struct Product {
# [ facet ( validate :: custom = validate_positive )]
price : i64 ,
} Built-in validators
| Validator | Syntax | Applies to |
|---|---|---|
min | validate::min = 0 | numbers |
max | validate::max = 100 | numbers |
min_length | validate::min_length = 1 | String, Vec, slices |
max_length | validate::max_length = 100 | String, Vec, slices |
email | validate::email | String |
url | validate::url | String |
regex | validate::regex = r"..." | String |
contains | validate::contains = "foo" | String |
custom | validate::custom = fn_name | any |
Auto-deref is supported: a fn(&str) validator works for String fields.
Integration
Enable the validate feature on facet-json (or another format crate):
toml
[ dependencies ]
facet-json = { version = "0.41" , features = [ "validate" ] }
facet-validate = "0.41" Sponsors
Thanks to all individual sponsors:
...along with corporate sponsors:
...without whom this work could not exist.
Special thanks
The facet logo was drawn by Misiasart.
License
Licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.