rsonschema 0.1.15

A fast, simple, user-friendly JSON Schema validator for Rust
Documentation
use crate::{RefResolver, Schemas, schema};

use serde_json::Value;

pub(crate) struct State<'a> {
    pub(crate) absolute_schemas: Schemas,
    pub(crate) ref_resolver: RefResolver<'a>,
}

impl State<'_> {
    pub(crate) fn get_schema_from_id(
        &mut self,
        id: &schema::common::id::Id,
        relative_schemas: &Schemas,
    ) -> Option<Value> {
        match &id {
            schema::common::id::Id::Absolute(url) => match self.absolute_schemas.get(id) {
                Some(schema) => Some(schema.clone()),
                None => {
                    let url = url.as_str();
                    let schema = (self.ref_resolver)(url);
                    if let Some(schema) = &schema {
                        self.absolute_schemas.insert(id.clone(), schema.clone());
                    }
                    schema
                }
            },
            schema::common::id::Id::Relative(relative) => match relative_schemas.get(id) {
                Some(schema) => Some(schema.clone()),
                None => (self.ref_resolver)(relative),
            },
        }
    }
}