tier 0.1.17

Rust configuration library for layered TOML, env, and CLI settings
Documentation
use regex::Regex;
use serde_json::Value;

use crate::schema::count::{keyword_u64, len_at_least, len_at_most};

pub(in crate::schema::example) fn string_matches_schema(
    text: &str,
    object: &serde_json::Map<String, Value>,
) -> bool {
    let char_count = text.chars().count();
    if keyword_u64(object, "minLength")
        .is_some_and(|min_length| !len_at_least(char_count, min_length))
    {
        return false;
    }
    if keyword_u64(object, "maxLength")
        .is_some_and(|max_length| !len_at_most(char_count, max_length))
    {
        return false;
    }
    if let Some(pattern) = object.get("pattern").and_then(Value::as_str)
        && !Regex::new(pattern).is_ok_and(|regex| regex.is_match(text))
    {
        return false;
    }

    true
}