All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.io.github.optimumcode.json.schema.internal.RecursiveRefSchemaAssertion.kt Maven / Gradle / Ivy

package io.github.optimumcode.json.schema.internal

import io.github.optimumcode.json.pointer.JsonPointer
import io.github.optimumcode.json.pointer.plus
import io.github.optimumcode.json.pointer.relative
import io.github.optimumcode.json.schema.ErrorCollector
import kotlinx.serialization.json.JsonElement

internal class RecursiveRefSchemaAssertion(
  private val basePath: JsonPointer,
  private val refId: RefId,
) : JsonSchemaAssertion {
  override fun validate(
    element: JsonElement,
    context: AssertionContext,
    errorCollector: ErrorCollector,
  ): Boolean {
    return context.getRecursiveRoot()?.validate(element, context, errorCollector) ?: run {
      val (refIdPath, refAssertion) = context.referenceResolver.dynamicRef(refId)
      refAssertion.validate(element, context) {
        errorCollector.onError(
          it.copy(
            schemaPath = basePath + refIdPath.relative(it.schemaPath),
            absoluteLocation = it.absoluteLocation ?: it.schemaPath,
          ),
        )
      }
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy