tier 0.1.17

Rust configuration library for layered TOML, env, and CLI settings
Documentation
mod field;
mod redaction;
mod traversal;

use serde_json::Value;

use crate::ConfigMetadata;

use self::traversal::annotate_schema_path;

pub(super) use self::redaction::{
    is_secret_schema_node, redact_example_value, redact_secret_schema_examples,
};

pub(super) fn apply_metadata_annotations(schema: &mut Value, metadata: &ConfigMetadata) {
    let snapshot = schema.clone();
    apply_root_checks(schema, metadata);

    for field in metadata.fields() {
        let effective = metadata
            .effective_field_for(&field.path)
            .unwrap_or_else(|| field.clone());
        annotate_schema_path(schema, &snapshot, &field.path, &effective);
    }
}

fn apply_root_checks(schema: &mut Value, metadata: &ConfigMetadata) {
    let Some(object) = schema.as_object_mut() else {
        return;
    };
    if metadata.checks().is_empty() {
        return;
    }

    object.insert(
        "x-tier-checks".to_owned(),
        serde_json::to_value(metadata.checks()).unwrap_or_else(|_| Value::Array(Vec::new())),
    );
}