macro_rules! push_error { ($value:expr, $errors:expr) => { match $value { Err(error) => { $errors.push(error); None }, Ok(value) => Some(value) } }; ($value:expr, $errors:expr, $path:expr) => { match $value { Err(error) => { $errors.push(error.with_path($path)); None }, Ok(value) => Some(value) } }; } macro_rules! append_errors { ($value:expr, $errors:expr) => { match $value { Err(mut err) => { $errors.append(&mut err); None }, Ok(value) => Some(value) } }; ($value:expr, $errors:expr, $path:expr) => { match $value { Err(err) => { $errors.extend(err.into_iter().map(|e| { e.with_path($path) })); None }, Ok(value) => Some(value) } }; } pub(crate) use append_errors; pub(crate) use push_error;