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
}