serde_valid_derive 2.0.2

JSON Schema based validation tool using serde.
Documentation
mod meta;

use crate::{attribute::Validator, warning::WithWarnings};

use self::meta::extract_variant_validator;

pub fn collect_variant_custom_from_variant(
    attributes: &[syn::Attribute],
) -> Result<WithWarnings<Validator>, crate::Errors> {
    let mut errors = vec![];
    let mut warnings = vec![];

    let validations = attributes
        .iter()
        .filter_map(|attribute| {
            if attribute.path().is_ident("validate") {
                match extract_variant_validator(attribute) {
                    Ok(validator) => {
                        warnings.extend(validator.warnings);
                        Some(validator.data)
                    }
                    Err(validator_error) => {
                        errors.extend(validator_error);
                        None
                    }
                }
            } else {
                None
            }
        })
        .collect::<Vec<_>>();

    if errors.is_empty() {
        Ok(WithWarnings::new_with_warnings(
            Validator::from_iter(validations),
            warnings,
        ))
    } else {
        Err(errors)
    }
}