json-tools / json-schema / Json.Schema.Builder

Convenience API to build a valid JSON schema

Definition


type SchemaBuilder
    = SchemaBuilder ({ errors : List String, schema : Maybe Json.Schema.Definitions.SubSchema, bool : Maybe Basics.Bool })

Builder for JSON schema providing an API like this:

buildSchema
    |> withTitle "My object"
    |> withProperties
        [ ( "foo"
          , buildSchema
                |> withType "string"
          )
        , ( "bar"
          , buildSchema
                |> withType "integer"
                |> withMaximum 10
          )
        ]

Schema builder creation

buildSchema : SchemaBuilder

Create schema builder with blank schema

boolSchema : Basics.Bool -> SchemaBuilder

Create boolean schema

toSchema : SchemaBuilder -> Result String Json.Schema.Definitions.Schema

Extract JSON Schema from the builder

encode : Basics.Int -> Json.Schema.Definitions.Schema -> String

Encode schema into a builder code (elm)

Building up schema

Type

JSON Schema spec allows type to be string or array of strings. There are three groups of types produced: single types (e.g. "string"), nullable types (e.g. ["string", "null"]) and union types (e.g. ["string", "object"])

withType : String -> SchemaBuilder -> SchemaBuilder

Set the type property of JSON schema to a specific type, accepts strings

buildSchema
    |> withType "boolean"

withNullableType : String -> SchemaBuilder -> SchemaBuilder

Set the type property of JSON schema to a nullable type.

buildSchema
    |> withNullableType "string"

withUnionType : List String -> SchemaBuilder -> SchemaBuilder

Set the type property of JSON schema to an union type.

buildSchema
    |> withUnionType [ "string", "object" ]

Meta

withTitle : String -> SchemaBuilder -> SchemaBuilder

withDescription : String -> SchemaBuilder -> SchemaBuilder

withDefault : Json.Decode.Value -> SchemaBuilder -> SchemaBuilder

withExamples : List Json.Decode.Value -> SchemaBuilder -> SchemaBuilder

withDefinitions : List ( String, SchemaBuilder ) -> SchemaBuilder -> SchemaBuilder

JSON-Schema

withId : String -> SchemaBuilder -> SchemaBuilder

withRef : String -> SchemaBuilder -> SchemaBuilder

withCustomKeyword : String -> Json.Decode.Value -> SchemaBuilder -> SchemaBuilder

Numeric validations

The following validations are only applicable to numeric values and will always succeed for any type other than number and integer

withMultipleOf : Basics.Float -> SchemaBuilder -> SchemaBuilder

withMaximum : Basics.Float -> SchemaBuilder -> SchemaBuilder

withMinimum : Basics.Float -> SchemaBuilder -> SchemaBuilder

withExclusiveMaximum : Basics.Float -> SchemaBuilder -> SchemaBuilder

withExclusiveMinimum : Basics.Float -> SchemaBuilder -> SchemaBuilder

String validations

withMaxLength : Basics.Int -> SchemaBuilder -> SchemaBuilder

withMinLength : Basics.Int -> SchemaBuilder -> SchemaBuilder

withPattern : String -> SchemaBuilder -> SchemaBuilder

withFormat : String -> SchemaBuilder -> SchemaBuilder

Array validations

withItems : List SchemaBuilder -> SchemaBuilder -> SchemaBuilder

withItem : SchemaBuilder -> SchemaBuilder -> SchemaBuilder

withAdditionalItems : SchemaBuilder -> SchemaBuilder -> SchemaBuilder

withMaxItems : Basics.Int -> SchemaBuilder -> SchemaBuilder

withMinItems : Basics.Int -> SchemaBuilder -> SchemaBuilder

withUniqueItems : Basics.Bool -> SchemaBuilder -> SchemaBuilder

withContains : SchemaBuilder -> SchemaBuilder -> SchemaBuilder

Set the contains property of JSON schema to a sub-schema.

buildSchema
    |> withContains
        (buildSchema
            |> withType "string"
        )

Object validations

withMaxProperties : Basics.Int -> SchemaBuilder -> SchemaBuilder

withMinProperties : Basics.Int -> SchemaBuilder -> SchemaBuilder

withRequired : List String -> SchemaBuilder -> SchemaBuilder

withProperties : List ( String, SchemaBuilder ) -> SchemaBuilder -> SchemaBuilder

withPatternProperties : List ( String, SchemaBuilder ) -> SchemaBuilder -> SchemaBuilder

withAdditionalProperties : SchemaBuilder -> SchemaBuilder -> SchemaBuilder

withSchemaDependency : String -> SchemaBuilder -> SchemaBuilder -> SchemaBuilder

withPropNamesDependency : String -> List String -> SchemaBuilder -> SchemaBuilder

withPropertyNames : SchemaBuilder -> SchemaBuilder -> SchemaBuilder

Generic validations

withEnum : List Json.Decode.Value -> SchemaBuilder -> SchemaBuilder

withConst : Json.Decode.Value -> SchemaBuilder -> SchemaBuilder

withAllOf : List SchemaBuilder -> SchemaBuilder -> SchemaBuilder

withAnyOf : List SchemaBuilder -> SchemaBuilder -> SchemaBuilder

withOneOf : List SchemaBuilder -> SchemaBuilder -> SchemaBuilder

withNot : SchemaBuilder -> SchemaBuilder -> SchemaBuilder

Validation

validate : Json.Schema.Validation.ValidationOptions -> Json.Decode.Value -> SchemaBuilder -> Result (List Json.Schema.Validation.Error) Json.Decode.Value

Validate value using schema controlled by builder.