tier 0.1.17

Rust configuration library for layered TOML, env, and CLI settings
Documentation
use serde_json::{Map, Value};

use crate::schema::{
    allows_additional_array_items_for_schema, legacy_additional_items_for_schema,
    required_contains_additional_items_for_docs,
};

use super::path::{
    array_item_is_required, fixed_array_item_count, required_additional_array_items,
};

pub(super) fn fixed_item_required(
    required: bool,
    object: &Map<String, Value>,
    index: usize,
) -> bool {
    required && array_item_is_required(object, index)
}

pub(super) fn homogeneous_items_schema(object: &Map<String, Value>) -> Option<&Value> {
    object
        .get("items")
        .filter(|value| !value.is_array() && !matches!(value, Value::Bool(false)))
}

pub(super) fn legacy_additional_items_schema(object: &Map<String, Value>) -> Option<&Value> {
    legacy_additional_items_for_schema(object)
        .filter(|value| !value.is_array() && !matches!(value, Value::Bool(false)))
}

pub(super) fn contains_schema(object: &Map<String, Value>) -> Option<&Value> {
    object
        .get("contains")
        .filter(|value| !matches!(value, Value::Bool(false)))
}

pub(super) fn allows_wildcard_entries(object: &Map<String, Value>) -> bool {
    allows_additional_array_items_for_schema(object, fixed_array_item_count(object))
}

pub(super) fn additional_items_required(required: bool, object: &Map<String, Value>) -> bool {
    required && required_additional_array_items(object, fixed_array_item_count(object)) > 0
}

pub(super) fn contains_items_required(
    required: bool,
    object: &Map<String, Value>,
    root: &Value,
) -> bool {
    required && required_contains_additional_items_for_docs(object, root) > 0
}