serde_valid_derive 0.16.0-alpha

JSON Schema based validation tool using with serde.
Documentation
mod meta_list;
mod meta_path;
mod nested_meta_list;
mod nested_meta_name_value;
mod nested_meta_path;

use crate::serde::rename::RenameMap;
use crate::types::Field;
use crate::validate::Validator;
use meta_path::extract_validator_from_meta_path;

use self::meta_list::extract_validator_from_meta_list;

pub fn extract_meta_validator(
    field: &impl Field,
    attribute: &syn::Attribute,
    rename_map: &RenameMap,
) -> Result<Validator, crate::Errors> {
    match attribute.parse_meta() {
        Ok(syn::Meta::List(list)) => {
            extract_validator_from_meta_list(field, attribute, &list, rename_map)
        }
        Ok(syn::Meta::Path(_)) => extract_validator_from_meta_path(field, rename_map),
        Ok(syn::Meta::NameValue(name_value)) => {
            Err(vec![crate::Error::validate_meta_name_value_not_support(
                name_value,
            )])
        }
        Err(error) => Err(vec![crate::Error::validate_attribute_parse_error(
            attribute, &error,
        )]),
    }
}