The validate!
macro validates a given input with a given set of validator
functions and iterate over the errors. For example:
```rust
let mut errors = Vec::new();
validate![profileurl => for err in maxlen(265), weburl(), notforbidden() { errors.push(format!("profile URL {}", err)); } ]; ```
In the above example the validate!
macro expands to:
rust
if let Err(err) = has_max_len(profile_url, 265) {
errors.push(format!("profile URL {}", err));
}
if let Err(err) = is_web_url(profile_url) {
errors.push(format!("profile URL {}", err));
}
if let Err(err) = is_not_forbidden(profile_url) {
errors.push(format!("profile URL {}", err));
}
Notice how the first expression is automatically passed as the first argument to all listed validation functions.
Since needing to validate values inside Option
s is very common,
this crate also provides a validate_opt!
macro:
rust
validate_opt![profile_url, ...];
is equivalent to
rust
if let Some(profile_url) = profile_url {
validate![profile_url, ...];
}
You can easily define your own validation functions, you just need
to return a Result
and take the input as the first argument.