# jsv v0.18.3 - Table of Contents

A JSON Schema Validator with complete support for the latest specifications.

## GUIDES

- [Changelog](changelog.md)

- Schemas
  - [Defining Schemas](defining-schemas.md)
  - [Custom Cast Functions](cast-functions.md)

- Build
  - [Building Schemas](build-basics.md)
  - [Resolvers](resolvers.md)
  - [Vocabularies](vocabularies.md)

- Validation
  - [Validate Data With Schemas](validation-basics.md)
  - [Decimal Support](decimal-support.md)

- Dev Log
  - [API Changes in JSV 0.9](api-changes-v0-9.md)

## Modules

- Main API
  - [JSV](JSV.md): JSV is a JSON Schema Validator.

- Schema Definition
  - [JSV.Schema](JSV.Schema.md): This module defines a struct where all the supported keywords of the JSON
schema specification are defined as keys. Text editors that can predict the
struct keys will make autocompletion available when writing schemas.
  - [JSV.Schema.Helpers](JSV.Schema.Helpers.md): Helpers to define schemas in plain Elixir code.

- Build
  - [JSV.BuildError](JSV.BuildError.md): A simple wrapper for errors returned from `JSV.build/2`.

  - [JSV.FormatValidator](JSV.FormatValidator.md): Behaviour for format validator implementations.

- Validation
  - [JSV.Root](JSV.Root.md): Internal representation of a JSON schema built with `JSV.build/2`.
  - [JSV.ValidationError](JSV.ValidationError.md): The data structure returned by `JSV.validate/3` when validation fails.

- Resolvers
  - [JSV.Resolver](JSV.Resolver.md): A behaviour describing the implementation of a [guides/build/custom resolver.
Resolves remote resources when building a JSON schema.

  - [JSV.Resolver.Embedded](JSV.Resolver.Embedded.md): A `JSV.Resolver` implementation that resolves known schemas shipped as part of
the `JSV` library.
  - [JSV.Resolver.Httpc](JSV.Resolver.Httpc.md): A `JSV.Resolver` implementation that will fetch the schemas from the web with
the help of the `:httpc` module.
  - [JSV.Resolver.Internal](JSV.Resolver.Internal.md): A `JSV.Resolver` implementation that resolves URIs pointing to the application
code base or JSV code base.
  - [JSV.Resolver.Local](JSV.Resolver.Local.md): This module allows to build `JSV.Resolver` implementations that resolves
schemas based on disk based on their `$id` property. It is not itself a
`JSV.Resolver` implementation.

- Vocabulary
  - [JSV.Vocabulary](JSV.Vocabulary.md): Behaviour for vocabulary implementation.
  - [JSV.Vocabulary.V202012.Applicator](JSV.Vocabulary.V202012.Applicator.md): Implementation for the `https://json-schema.org/draft/2020-12/vocab/applicator`
vocabulary.

  - [JSV.Vocabulary.V202012.Content](JSV.Vocabulary.V202012.Content.md): Placeholder implementation for the
`https://json-schema.org/draft/2020-12/vocab/content` vocabulary. No
validation is performed.

  - [JSV.Vocabulary.V202012.Core](JSV.Vocabulary.V202012.Core.md): Implementation for the `https://json-schema.org/draft/2020-12/vocab/core`
vocabulary.

  - [JSV.Vocabulary.V202012.Format](JSV.Vocabulary.V202012.Format.md): Implementation for the
`https://json-schema.org/draft/2020-12/vocab/format-annotation` and
`https://json-schema.org/draft/2020-12/vocab/format-assertion` vocabularies.

  - [JSV.Vocabulary.V202012.MetaData](JSV.Vocabulary.V202012.MetaData.md): Implementation for the `https://json-schema.org/draft/2020-12/vocab/meta-data`
vocabulary.

  - [JSV.Vocabulary.V202012.Unevaluated](JSV.Vocabulary.V202012.Unevaluated.md): Implementation for the
`https://json-schema.org/draft/2020-12/vocab/unevaluated` vocabulary.

  - [JSV.Vocabulary.V202012.Validation](JSV.Vocabulary.V202012.Validation.md): Implementation for the
`https://json-schema.org/draft/2020-12/vocab/validation` vocabulary.

  - [JSV.Vocabulary.V7.Applicator](JSV.Vocabulary.V7.Applicator.md): Implementation of the applicator vocabulary with draft 7 sepecifiticies.

  - [JSV.Vocabulary.V7.Content](JSV.Vocabulary.V7.Content.md): Implementation of the content vocabulary with draft 7 sepecifiticies. No
validation is performed.

  - [JSV.Vocabulary.V7.Core](JSV.Vocabulary.V7.Core.md): Implementation of the core vocabulary with draft 7 sepecifiticies.

  - [JSV.Vocabulary.V7.Format](JSV.Vocabulary.V7.Format.md): Implementation of the format vocabulary with draft 7 sepecifiticies.

  - [JSV.Vocabulary.V7.MetaData](JSV.Vocabulary.V7.MetaData.md): Implementation of the meta-data vocabulary with draft 7 sepecifiticies.

  - [JSV.Vocabulary.V7.Validation](JSV.Vocabulary.V7.Validation.md): Implementation of the validation vocabulary with draft 7 sepecifiticies.

- Utilities
  - [JSV.Codec](JSV.Codec.md): JSON encoder/decoder based on available implementation.
  - [JSV.Helpers.MapExt](JSV.Helpers.MapExt.md): Helpers to work with maps.

  - [JSV.Helpers.Traverse](JSV.Helpers.Traverse.md): Helpers to work with nested generic data structures.

  - [JSV.Normalizer](JSV.Normalizer.md): A Normalizer for JSON data structures.

  - [JSV.Normalizer.Normalize](JSV.Normalizer.Normalize.md): Protocol used by `JSV.Normalizer` to transform structs into JSON-compatible
data structures when normalizing a schema.
  - [JSV.Schema.Composer](JSV.Schema.Composer.md): This module contains a composable API to build schemas in a functionnal way.

- Internal
  - [JSV.BooleanSchema](JSV.BooleanSchema.md): Represents a boolean schema. Boolean schemas accept or reject any data
according to their boolean value.
  - [JSV.Builder](JSV.Builder.md): Internal logic to build raw schemas into `JSV.Root` structs.

  - [JSV.ErrorFormatter](JSV.ErrorFormatter.md): Error formatting helpers.
  - [JSV.Key](JSV.Key.md): Helpers around the different key formats used in the resolver, builder and
validator states to index sub schemas, referenced schemas, anchor or meta
schemas.
  - [JSV.RNS](JSV.RNS.md): 
A namespace for a schema ID or reference.
  - [JSV.Ref](JSV.Ref.md): Representation of a JSON Schema reference (`$ref` or `$dynamicRef`).

  - [JSV.Resolver.Resolved](JSV.Resolver.Resolved.md): Metadata gathered from a remote schema or a sub-schema.

  - [JSV.Subschema](JSV.Subschema.md): Build result for a raw map schema.

  - [JSV.Validator](JSV.Validator.md): This is the home of the recursive validation logic.
  - [JSV.Validator.Error](JSV.Validator.Error.md): Representation of an error encountered during validation.

  - [JSV.Validator.ValidationContext](JSV.Validator.ValidationContext.md): Validation context carried along by the `JSV.Validator` and given to all
vocabulary implementations.

## Mix Tasks

- Internal
  - [mix jsv.gen_test_suite](Mix.Tasks.Jsv.GenTestSuite.md)
  - [mix jsv.gen_test_suite.value_dumper](Mix.Tasks.Jsv.GenTestSuite.ValueDumper.md)
  - [mix jsv.update_jsts_ref](Mix.Tasks.Jsv.UpdateJstsRef.md)

