Skip to main content

mcp_context_server/
schema.rs

1use jsonschema::validator_for;
2use serde_json::Value;
3
4#[derive(Debug, thiserror::Error)]
5pub enum SchemaValidationError {
6    #[error("Schema parse error: {0}")]
7    SchemaParse(#[from] serde_json::Error),
8    #[error("Schema compile error: {0}")]
9    SchemaCompile(String),
10    #[error("Instance validation failed")]
11    ValidationFailed,
12}
13
14/// Validate a JSON instance against a JSON Schema (draft 2020-12).
15/// Returns Ok(()) if valid, Err otherwise.
16pub fn validate_json(schema_str: &str, instance_str: &str) -> Result<(), SchemaValidationError> {
17    let schema_json: Value = serde_json::from_str(schema_str)?;
18    let instance_json: Value = serde_json::from_str(instance_str)?;
19
20    let validator = validator_for(&schema_json)
21        .map_err(|e| SchemaValidationError::SchemaCompile(e.to_string()))?;
22
23    if validator.is_valid(&instance_json) {
24        Ok(())
25    } else {
26        Err(SchemaValidationError::ValidationFailed)
27    }
28}