endors/
macros.rs

1/// Validates a value with a given validator.
2#[macro_export]
3macro_rules! validate {
4    ($value:expr, $validator:expr) => {{
5        use $crate::PropertyValidator as _;
6        let validator = $validator;
7        match validator.is_valid(&$value) {
8            true => Ok(()),
9            false => Err(endors::ValidationFailure::new(
10                validator.message(),
11                stringify!($value).to_string(),
12            )),
13        }
14    }};
15    ($value:expr, $validator:expr => $message:expr) => {{
16        use $crate::PropertyValidator as _;
17        let validator = $validator;
18        match validator.is_valid(&$value) {
19            true => Ok(()),
20            false => Err(endors::ValidationFailure::new(
21                $message.to_string(),
22                stringify!($value).to_string(),
23            )),
24        }
25    }};
26}
27
28/// Collects all error results into a single error.
29#[macro_export]
30macro_rules! collect_results {
31    ($($validation:expr),+ $(,)?) => {{
32        let mut errors = Vec::new();
33        $(
34            if let Err(err) = $validation {
35                errors.push(err);
36            }
37        )+
38        if errors.is_empty() {
39            Ok(())
40        } else {
41            Err(endors::Error::new(errors))
42        }
43    }};
44}