json/blueprint/schema

JSON Schema documents for the 1.x json/blueprint.Decoder.

Schema and SchemaDefinition describe the schemas that 1.x decoders produce, including $ref and $defs for recursive types, and to_json renders a document whose $schema is json_schema_version, the Draft-07 URI. json/blueprint.generate_json_schema calls it. Codecs from json/blueprint/codec use their own codec.Schema and render Draft 2020-12 instead.

Types

A legacy schema definition and optional document annotations.

pub type Schema {
  Schema(
    schema: SchemaDefinition,
    vocabulary: option.Option(List(String)),
    id: option.Option(String),
    comment: option.Option(String),
    defs: option.Option(List(#(String, SchemaDefinition))),
  )
}

Constructors

A legacy schema description; nested definitions may contain references.

pub type SchemaDefinition {
  Type(type_: SchemaType)
  Enum(values: List(json.Json), type_: option.Option(SchemaType))
  Const(value: json.Json)
  Nullable(schema: SchemaDefinition)
  Optional(schema: SchemaDefinition)
  Number(
    minimum: option.Option(Float),
    maximum: option.Option(Float),
    exclusive_minimum: option.Option(Float),
    exclusive_maximum: option.Option(Float),
    multiple_of: option.Option(Float),
  )
  String(
    min_length: option.Option(Int),
    max_length: option.Option(Int),
    pattern: option.Option(String),
    format: option.Option(StringFormat),
  )
  Array(items: option.Option(SchemaDefinition))
  DetailedArray(
    items: option.Option(SchemaDefinition),
    prefix_items: option.Option(List(SchemaDefinition)),
    min_items: option.Option(Int),
    max_items: option.Option(Int),
    unique_items: option.Option(Bool),
    contains: option.Option(SchemaDefinition),
    min_contains: option.Option(Int),
    max_contains: option.Option(Int),
  )
  Object(
    properties: List(#(String, SchemaDefinition)),
    additional_properties: option.Option(Bool),
    required: option.Option(List(String)),
  )
  DetailedObject(
    properties: option.Option(List(#(String, SchemaDefinition))),
    pattern_properties: option.Option(
      List(#(String, SchemaDefinition)),
    ),
    additional_properties: option.Option(SchemaDefinition),
    required: option.Option(List(String)),
    property_names: option.Option(SchemaDefinition),
    min_properties: option.Option(Int),
    max_properties: option.Option(Int),
  )
  AllOf(schemas: List(SchemaDefinition))
  AnyOf(schemas: List(SchemaDefinition))
  OneOf(schemas: List(SchemaDefinition))
  Not(schema: SchemaDefinition)
  Ref(ref: String)
  TrueValue
  FalseValue
}

Constructors

JSON types used by the legacy renderer.

pub type SchemaType {
  Null
  BooleanType
  ObjectType
  ArrayType
  NumberType
  StringType
  IntegerType
  Multiple(List(SchemaType))
}

Constructors

  • Null
  • BooleanType
  • ObjectType
  • ArrayType
  • NumberType
  • StringType
  • IntegerType
  • Multiple(List(SchemaType))

String format labels emitted by the legacy renderer.

pub type StringFormat {
  DateTime
  Date
  Time
  Duration
  Email
  IdnEmail
  Hostname
  IdnHostname
  Ipv4
  Ipv6
  Uri
  UriReference
  Iri
  IriReference
  UriTemplate
  JsonPointer
  RelativeJsonPointer
  Regex
}

Constructors

  • DateTime
  • Date
  • Time
  • Duration
  • Email
  • IdnEmail
  • Hostname
  • IdnHostname
  • Ipv4
  • Ipv6
  • Uri
  • UriReference
  • Iri
  • IriReference
  • UriTemplate
  • JsonPointer
  • RelativeJsonPointer
  • Regex

Values

pub fn hash_schema_definition(def: SchemaDefinition) -> String
pub const json_schema_version: String
pub fn map_ref(
  def: SchemaDefinition,
  f: fn(String) -> String,
) -> SchemaDefinition
pub fn new_schema(
  definition: SchemaDefinition,
  references: option.Option(List(#(String, SchemaDefinition))),
) -> Schema

Build a schema document with optional named definitions.

pub fn number_constraint(
  minimum minimum: option.Option(Float),
  maximum maximum: option.Option(Float),
  exclusive_minimum exclusive_minimum: option.Option(Float),
  exclusive_maximum exclusive_maximum: option.Option(Float),
  multiple_of multiple_of: option.Option(Float),
) -> SchemaDefinition

Describe optional bounds and a multiple constraint for numbers.

pub fn string_constraint(
  min_length min_length: option.Option(Int),
  max_length max_length: option.Option(Int),
  pattern pattern: option.Option(String),
  format format: option.Option(StringFormat),
) -> SchemaDefinition

Describe optional string length, pattern, and format constraints.

pub fn to_json(schema: Schema) -> json.Json

Convert a Schema to JSON value

pub fn to_json_string(schema: Schema) -> String

Convert a Schema to JSON string

pub fn type_constraint(type_: SchemaType) -> SchemaDefinition

Describe a JSON type.

✨ Search Document