preflight

The validate! macro validates a given input with a given set of validator functions and iterate over the errors. For example:

```rust

[macro_use] extern crate preflight;

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 Options 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.