use crate::error::{Error, Result};
use std::sync::OnceLock;
const SCHEMA_JSON: &str = include_str!("../../agent-policy.schema.json");
#[allow(clippy::expect_used)] fn compiled_validator() -> &'static jsonschema::Validator {
static VALIDATOR: OnceLock<jsonschema::Validator> = OnceLock::new();
VALIDATOR.get_or_init(|| {
let schema: serde_json::Value =
serde_json::from_str(SCHEMA_JSON).expect("bundled schema is always valid JSON");
jsonschema::validator_for(&schema).expect("bundled schema always compiles")
})
}
pub fn validate(doc: &serde_json::Value) -> Result<()> {
let validator = compiled_validator();
let errors: Vec<String> = validator
.iter_errors(doc)
.map(|e| format!(" - {e}"))
.collect();
if errors.is_empty() {
Ok(())
} else {
Err(Error::Schema(errors.join("\n")))
}
}