Backplane.JsonSchema.Validator (backplane_json_schema v1.10.58)

Copy Markdown

Executes compiled Schema rules against data, accumulating errors and tracking evaluated keys for unevaluatedProperties/unevaluatedItems.

During validation, a context tuple is threaded through each rule:

{path, evaluated_keys, validation_context}
  • path — Reversed list of JSON Pointer segments (e.g., ["email", 0, "users"])
  • evaluated_keys — MapSet of property names or array indices validated so far
  • validation_context — ValidationContext struct referencing the root schema

Examples

iex> {:ok, schema} = Backplane.JsonSchema.compile(%{"type" => "object", "properties" => %{"name" => %{"type" => "string"}}})
iex> Backplane.JsonSchema.Validator.validate(schema, %{"name" => "Alice"})
:ok

Summary

Functions

Validates data against a compiled schema.

Functions

validate(root_schema, data)

Validates data against a compiled schema.

Regex engine errors abort validation with an :indeterminate_pattern error. They are not ordinary schema mismatches and cannot be inverted or suppressed by subschema combinators.

Examples

iex> {:ok, schema} = Backplane.JsonSchema.compile(%{"type" => "integer", "minimum" => 0})
iex> Backplane.JsonSchema.Validator.validate(schema, 10)
:ok

iex> {:ok, schema} = Backplane.JsonSchema.compile(%{"type" => "integer", "minimum" => 0})
iex> {:error, errors} = Backplane.JsonSchema.Validator.validate(schema, -5)
iex> Enum.any?(errors, fn e -> e.rule == :minimum end)
true

validate_entry(schema, data, path, context, initial_evaluted \\ %{__struct__: MapSet, map: %{}})

@spec validate_entry(
  Backplane.JsonSchema.Types.Schema.t(),
  term(),
  list(),
  Backplane.JsonSchema.Types.ValidationContext.t(),
  term()
) :: {:ok, MapSet.t()} | {:error, validation_error_list()}

Recursive validation engine called by the rule dispatcher.

Executes all rules in the schema sequentially, accumulating errors and evaluated keys.

Examples

iex> {:ok, schema} = Backplane.JsonSchema.compile(%{"type" => "string"})
iex> ctx = %Backplane.JsonSchema.Types.ValidationContext{root_schema: schema, scope_stack: [], source_id: nil, raw: nil}
iex> Backplane.JsonSchema.Validator.validate_entry(schema, "hello", [], ctx)
{:ok, MapSet.new()}