trait JsonSchemas extends TuplesSchemas with PartialInvariantFunctorSyntax
An algebra interface for describing algebraic data types. Such descriptions can be interpreted to produce a JSON schema of the data type, a JSON encoder, a JSON decoder, etc.
A description contains the fields of a case class and their type, and the constructor names of a sealed trait.
For instance, consider the following record type:
case class User(name: String, age: Int)
Its description is the following:
object User { implicit val schema: JsonSchema[User] = ( field[String]("name") zip field[Int]("age") ).xmap((User.apply _).tupled)(Function.unlift(User.unapply)) }
The description says that the record type has two fields, the first one has type String
and is
named “name”, and the second one has type Int
and name “age”.
To describe sum types you have to explicitly “tag” each alternative:
sealed trait Shape case class Circle(radius: Double) extends Shape case class Rectangle(width: Double, height: Double) extends Shape object Shape { implicit val schema: JsonSchema[Shape] = { val circleSchema = field[Double]("radius").xmap(Circle)(Function.unlift(Circle.unapply)) val rectangleSchema = ( field[Double]("width") zip field[Double]("height") ).xmap((Rectangle.apply _).tupled)(Function.unlift(Rectangle.unapply)) (circleSchema.tagged("Circle") orElse rectangleSchema.tagged("Rectangle")) .xmap[Shape] { case Left(circle) => circle case Right(rect) => rect } { case c: Circle => Left(c) case r: Rectangle => Right(r) } } }
- Source
- JsonSchemas.scala
- Grouped
- Alphabetic
- By Inheritance
- JsonSchemas
- PartialInvariantFunctorSyntax
- InvariantFunctorSyntax
- TuplesSchemas
- AnyRef
- Any
- by any2stringadd
- by StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- Protected
Type Members
- implicit class InvariantFunctorSyntax[A, F[_]] extends AnyRef
Extension methods for values of type
F[A]
for which there is an implicitInvariantFunctor[F]
instance.Extension methods for values of type
F[A]
for which there is an implicitInvariantFunctor[F]
instance.- Definition Classes
- InvariantFunctorSyntax
- implicit class PartialInvariantFunctorSyntax[A, F[_]] extends AnyRef
- Definition Classes
- PartialInvariantFunctorSyntax
- abstract type Enum[A] <: JsonSchema[A]
A more specific type of JSON schema for enumerations, i.e.
A more specific type of JSON schema for enumerations, i.e. types that have a specific set of valid values
Values of type
Enum[A]
can be constructed by the operations:- Note
This type has implicit methods provided by the EnumOps class.
- implicit final class EnumOps[A] extends JsonSchemaDocumentationOps[A]
- abstract type JsonSchema[A]
The JSON schema of a type
A
The JSON schema of a type
A
JSON schemas can be interpreted as encoders serializing values of type
A
into JSON, decoders de-serializing JSON documents into values of typeA
, or documentation rendering the underlying JSON schema.The
JsonSchemas
trait provides implicit definitions ofJsonSchema[A]
for basic types (Int
,Double
,String
, etc.), and operations such as field, optField, or enumeration, which construct more complex JSON schemas.- Note
This type has implicit methods provided by the PartialInvariantFunctorSyntax, InvariantFunctorSyntax, and JsonSchemaOps classes.
- sealed trait JsonSchemaDocumentationOps[A] extends AnyRef
Documentation related methods for annotating schemas.
Documentation related methods for annotating schemas. Encoder and decoder interpreters ignore this information.
- implicit final class JsonSchemaOps[A] extends JsonSchemaDocumentationOps[A]
Implicit methods for values of type JsonSchema
- abstract type Record[A] <: JsonSchema[A]
A more specific type of JSON schema for record types (case classes)
A more specific type of JSON schema for record types (case classes)
Values of type
Record[A]
can be constructed with the operations field and optField.- Note
This type has implicit methods provided by the PartialInvariantFunctorSyntax, InvariantFunctorSyntax, and RecordOps classes.
- implicit final class RecordOps[A] extends JsonSchemaDocumentationOps[A]
Implicit methods for values of type Record
- abstract type Tagged[A] <: JsonSchema[A]
A more specific type of JSON schema for sum types (sealed traits)
A more specific type of JSON schema for sum types (sealed traits)
“Tagged” schemas include the name of the type
A
as an additional discriminator field. By default, the name of the discriminator field is defined by the operation defaultDiscriminatorName but it can be customized by calling the operationwithDiscriminator
.Values of type
Tagged[A]
can be constructed by calling the operationtagged
on aRecord[A]
.- Note
This type has implicit methods provided by the PartialInvariantFunctorSyntax, InvariantFunctorSyntax, and TaggedOps classes.
- implicit final class TaggedOps[A] extends JsonSchemaDocumentationOps[A]
Abstract Value Members
- implicit abstract def arrayJsonSchema[C[X] <: Iterable[X], A](implicit jsonSchema: JsonSchema[A], factory: Factory[A, C[A]]): JsonSchema[C[A]]
A JSON schema for sequences
- implicit abstract def bigdecimalJsonSchema: JsonSchema[BigDecimal]
A JSON schema for type
BigDecimal
- implicit abstract def booleanJsonSchema: JsonSchema[Boolean]
A JSON schema for type
Boolean
- implicit abstract def byteJsonSchema: JsonSchema[Byte]
A JSON schema for type
Byte
- abstract def choiceTagged[A, B](taggedA: Tagged[A], taggedB: Tagged[B]): Tagged[Either[A, B]]
The JSON schema of a coproduct made of the given alternative tagged records
- implicit abstract def doubleJsonSchema: JsonSchema[Double]
A JSON schema for type
Double
- implicit abstract def emptyRecord: Record[Unit]
The JSON schema of a record with no fields
The JSON schema of a record with no fields
- Encoder interpreters produce an empty JSON object,
- Decoder interpreters fail if the JSON value is not a JSON object,
- Documentation interpreters produce the JSON schema of a JSON object schema with no properties.
- abstract def enumeration[A](values: Seq[A])(tpe: JsonSchema[A]): Enum[A]
Promotes a schema to an enumeration.
Promotes a schema to an enumeration.
- Decoder interpreters fail if the input value does not match the encoded values of any of the possible values,
- Encoder interpreters never fail, even if the value is not contained in the set of possible values,
- Documentation interpreters enrich the JSON schema with an
enum
property listing the possible values.
- abstract def field[A](name: String, documentation: Option[String] = None)(implicit tpe: JsonSchema[A]): Record[A]
The JSON schema of a record with a single field
name
of typeA
The JSON schema of a record with a single field
name
of typeA
- Encoder interpreters produce a JSON object with one property of the given
name
, - Decoder interpreters fail if the JSON value is not a JSON object, or if it
doesn’t contain the
name
property, or if the property has an invalid value (according to itstpe
), - Documentation interpreters produce the JSON schema of a JSON object schema with
one required property of the given
name
.
- Encoder interpreters produce a JSON object with one property of the given
- implicit abstract def floatJsonSchema: JsonSchema[Float]
A JSON schema for type
Float
- implicit abstract def intJsonSchema: JsonSchema[Int]
A JSON schema for type
Int
- implicit abstract def jsonSchemaPartialInvFunctor: PartialInvariantFunctor[JsonSchema]
Provides
xmap
andxmapPartial
operations.Provides
xmap
andxmapPartial
operations.- See also
- implicit abstract def longJsonSchema: JsonSchema[Long]
A JSON schema for type
Long
- implicit abstract def mapJsonSchema[A](implicit jsonSchema: JsonSchema[A]): JsonSchema[Map[String, A]]
A JSON schema for maps with string keys
- abstract def namedEnum[A](schema: Enum[A], name: String): Enum[A]
Annotates the enumeration JSON schema with a name
- abstract def namedRecord[A](schema: Record[A], name: String): Record[A]
Annotates the record JSON schema with a name
- abstract def namedTagged[A](schema: Tagged[A], name: String): Tagged[A]
Annotates the tagged JSON schema with a name
- abstract def optField[A](name: String, documentation: Option[String] = None)(implicit tpe: JsonSchema[A]): Record[Option[A]]
The JSON schema of a record with a single optional field
name
of typeA
The JSON schema of a record with a single optional field
name
of typeA
- Encoder interpreters can omit the field or emit a field with a
null
value, - Decoder interpreters successfully decode
None
if the field is absent or if it is present but has the valuenull
. They fail if the field is present but contains an invalid value, - Documentation interpreters produce the JSON schema of a JSON object with an
optional property of the given
name
.
- Encoder interpreters can omit the field or emit a field with a
- abstract def orFallbackToJsonSchema[A, B](schemaA: JsonSchema[A], schemaB: JsonSchema[B]): JsonSchema[Either[A, B]]
A schema that can be either
schemaA
orschemaB
.A schema that can be either
schemaA
orschemaB
.Documentation interpreter produce a
oneOf
JSON schema. Encoder interpreters forward to eitherschemaA
orschemaB
. Decoder interpreters first try to decode withschemaA
, and fallback toschemaB
in case of failure.The difference between this operation and the operation
orElse
on “tagged” schemas is that this operation does not rely on a discriminator field between the alternative schemas. As a consequence, decoding is slower than with “tagged” schemas and provides less precise error messages.- Note
Be careful to use disjoint schemas for
A
andB
(none must be a subtype of the other), otherwise, a value of typeB
might also be successfully decoded as a value of typeA
, and this could have surprising consequences.
- implicit abstract def recordPartialInvFunctor: PartialInvariantFunctor[Record]
Provides
xmap
andxmapPartial
operations.Provides
xmap
andxmapPartial
operations.- See also
- abstract def stringJsonSchema(format: Option[String]): JsonSchema[String]
A JSON schema for type
String
.A JSON schema for type
String
.- format
An additional semantic information about the underlying format of the string
- implicit abstract def taggedPartialInvFunctor: PartialInvariantFunctor[Tagged]
Provides
xmap
andxmapPartial
operations.Provides
xmap
andxmapPartial
operations.- See also
- abstract def taggedRecord[A](recordA: Record[A], tag: String): Tagged[A]
Tags a schema for type
A
with the given tag name - implicit abstract def tuple10JsonSchema[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2], schema3: JsonSchema[T3], schema4: JsonSchema[T4], schema5: JsonSchema[T5], schema6: JsonSchema[T6], schema7: JsonSchema[T7], schema8: JsonSchema[T8], schema9: JsonSchema[T9], schema10: JsonSchema[T10]): JsonSchema[(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)]
A JSON schema for a tuple of 10 elements.
A JSON schema for a tuple of 10 elements.
Tuples are represented with JSON arrays, as documented in https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation.
- Definition Classes
- TuplesSchemas
- implicit abstract def tuple11JsonSchema[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2], schema3: JsonSchema[T3], schema4: JsonSchema[T4], schema5: JsonSchema[T5], schema6: JsonSchema[T6], schema7: JsonSchema[T7], schema8: JsonSchema[T8], schema9: JsonSchema[T9], schema10: JsonSchema[T10], schema11: JsonSchema[T11]): JsonSchema[(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)]
A JSON schema for a tuple of 11 elements.
A JSON schema for a tuple of 11 elements.
Tuples are represented with JSON arrays, as documented in https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation.
- Definition Classes
- TuplesSchemas
- implicit abstract def tuple12JsonSchema[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2], schema3: JsonSchema[T3], schema4: JsonSchema[T4], schema5: JsonSchema[T5], schema6: JsonSchema[T6], schema7: JsonSchema[T7], schema8: JsonSchema[T8], schema9: JsonSchema[T9], schema10: JsonSchema[T10], schema11: JsonSchema[T11], schema12: JsonSchema[T12]): JsonSchema[(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)]
A JSON schema for a tuple of 12 elements.
A JSON schema for a tuple of 12 elements.
Tuples are represented with JSON arrays, as documented in https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation.
- Definition Classes
- TuplesSchemas
- implicit abstract def tuple13JsonSchema[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2], schema3: JsonSchema[T3], schema4: JsonSchema[T4], schema5: JsonSchema[T5], schema6: JsonSchema[T6], schema7: JsonSchema[T7], schema8: JsonSchema[T8], schema9: JsonSchema[T9], schema10: JsonSchema[T10], schema11: JsonSchema[T11], schema12: JsonSchema[T12], schema13: JsonSchema[T13]): JsonSchema[(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13)]
A JSON schema for a tuple of 13 elements.
A JSON schema for a tuple of 13 elements.
Tuples are represented with JSON arrays, as documented in https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation.
- Definition Classes
- TuplesSchemas
- implicit abstract def tuple14JsonSchema[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2], schema3: JsonSchema[T3], schema4: JsonSchema[T4], schema5: JsonSchema[T5], schema6: JsonSchema[T6], schema7: JsonSchema[T7], schema8: JsonSchema[T8], schema9: JsonSchema[T9], schema10: JsonSchema[T10], schema11: JsonSchema[T11], schema12: JsonSchema[T12], schema13: JsonSchema[T13], schema14: JsonSchema[T14]): JsonSchema[(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14)]
A JSON schema for a tuple of 14 elements.
A JSON schema for a tuple of 14 elements.
Tuples are represented with JSON arrays, as documented in https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation.
- Definition Classes
- TuplesSchemas
- implicit abstract def tuple15JsonSchema[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2], schema3: JsonSchema[T3], schema4: JsonSchema[T4], schema5: JsonSchema[T5], schema6: JsonSchema[T6], schema7: JsonSchema[T7], schema8: JsonSchema[T8], schema9: JsonSchema[T9], schema10: JsonSchema[T10], schema11: JsonSchema[T11], schema12: JsonSchema[T12], schema13: JsonSchema[T13], schema14: JsonSchema[T14], schema15: JsonSchema[T15]): JsonSchema[(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15)]
A JSON schema for a tuple of 15 elements.
A JSON schema for a tuple of 15 elements.
Tuples are represented with JSON arrays, as documented in https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation.
- Definition Classes
- TuplesSchemas
- implicit abstract def tuple16JsonSchema[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2], schema3: JsonSchema[T3], schema4: JsonSchema[T4], schema5: JsonSchema[T5], schema6: JsonSchema[T6], schema7: JsonSchema[T7], schema8: JsonSchema[T8], schema9: JsonSchema[T9], schema10: JsonSchema[T10], schema11: JsonSchema[T11], schema12: JsonSchema[T12], schema13: JsonSchema[T13], schema14: JsonSchema[T14], schema15: JsonSchema[T15], schema16: JsonSchema[T16]): JsonSchema[(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)]
A JSON schema for a tuple of 16 elements.
A JSON schema for a tuple of 16 elements.
Tuples are represented with JSON arrays, as documented in https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation.
- Definition Classes
- TuplesSchemas
- implicit abstract def tuple17JsonSchema[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2], schema3: JsonSchema[T3], schema4: JsonSchema[T4], schema5: JsonSchema[T5], schema6: JsonSchema[T6], schema7: JsonSchema[T7], schema8: JsonSchema[T8], schema9: JsonSchema[T9], schema10: JsonSchema[T10], schema11: JsonSchema[T11], schema12: JsonSchema[T12], schema13: JsonSchema[T13], schema14: JsonSchema[T14], schema15: JsonSchema[T15], schema16: JsonSchema[T16], schema17: JsonSchema[T17]): JsonSchema[(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17)]
A JSON schema for a tuple of 17 elements.
A JSON schema for a tuple of 17 elements.
Tuples are represented with JSON arrays, as documented in https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation.
- Definition Classes
- TuplesSchemas
- implicit abstract def tuple18JsonSchema[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2], schema3: JsonSchema[T3], schema4: JsonSchema[T4], schema5: JsonSchema[T5], schema6: JsonSchema[T6], schema7: JsonSchema[T7], schema8: JsonSchema[T8], schema9: JsonSchema[T9], schema10: JsonSchema[T10], schema11: JsonSchema[T11], schema12: JsonSchema[T12], schema13: JsonSchema[T13], schema14: JsonSchema[T14], schema15: JsonSchema[T15], schema16: JsonSchema[T16], schema17: JsonSchema[T17], schema18: JsonSchema[T18]): JsonSchema[(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18)]
A JSON schema for a tuple of 18 elements.
A JSON schema for a tuple of 18 elements.
Tuples are represented with JSON arrays, as documented in https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation.
- Definition Classes
- TuplesSchemas
- implicit abstract def tuple19JsonSchema[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2], schema3: JsonSchema[T3], schema4: JsonSchema[T4], schema5: JsonSchema[T5], schema6: JsonSchema[T6], schema7: JsonSchema[T7], schema8: JsonSchema[T8], schema9: JsonSchema[T9], schema10: JsonSchema[T10], schema11: JsonSchema[T11], schema12: JsonSchema[T12], schema13: JsonSchema[T13], schema14: JsonSchema[T14], schema15: JsonSchema[T15], schema16: JsonSchema[T16], schema17: JsonSchema[T17], schema18: JsonSchema[T18], schema19: JsonSchema[T19]): JsonSchema[(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19)]
A JSON schema for a tuple of 19 elements.
A JSON schema for a tuple of 19 elements.
Tuples are represented with JSON arrays, as documented in https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation.
- Definition Classes
- TuplesSchemas
- implicit abstract def tuple20JsonSchema[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2], schema3: JsonSchema[T3], schema4: JsonSchema[T4], schema5: JsonSchema[T5], schema6: JsonSchema[T6], schema7: JsonSchema[T7], schema8: JsonSchema[T8], schema9: JsonSchema[T9], schema10: JsonSchema[T10], schema11: JsonSchema[T11], schema12: JsonSchema[T12], schema13: JsonSchema[T13], schema14: JsonSchema[T14], schema15: JsonSchema[T15], schema16: JsonSchema[T16], schema17: JsonSchema[T17], schema18: JsonSchema[T18], schema19: JsonSchema[T19], schema20: JsonSchema[T20]): JsonSchema[(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20)]
A JSON schema for a tuple of 20 elements.
A JSON schema for a tuple of 20 elements.
Tuples are represented with JSON arrays, as documented in https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation.
- Definition Classes
- TuplesSchemas
- implicit abstract def tuple21JsonSchema[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2], schema3: JsonSchema[T3], schema4: JsonSchema[T4], schema5: JsonSchema[T5], schema6: JsonSchema[T6], schema7: JsonSchema[T7], schema8: JsonSchema[T8], schema9: JsonSchema[T9], schema10: JsonSchema[T10], schema11: JsonSchema[T11], schema12: JsonSchema[T12], schema13: JsonSchema[T13], schema14: JsonSchema[T14], schema15: JsonSchema[T15], schema16: JsonSchema[T16], schema17: JsonSchema[T17], schema18: JsonSchema[T18], schema19: JsonSchema[T19], schema20: JsonSchema[T20], schema21: JsonSchema[T21]): JsonSchema[(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21)]
A JSON schema for a tuple of 21 elements.
A JSON schema for a tuple of 21 elements.
Tuples are represented with JSON arrays, as documented in https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation.
- Definition Classes
- TuplesSchemas
- implicit abstract def tuple22JsonSchema[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2], schema3: JsonSchema[T3], schema4: JsonSchema[T4], schema5: JsonSchema[T5], schema6: JsonSchema[T6], schema7: JsonSchema[T7], schema8: JsonSchema[T8], schema9: JsonSchema[T9], schema10: JsonSchema[T10], schema11: JsonSchema[T11], schema12: JsonSchema[T12], schema13: JsonSchema[T13], schema14: JsonSchema[T14], schema15: JsonSchema[T15], schema16: JsonSchema[T16], schema17: JsonSchema[T17], schema18: JsonSchema[T18], schema19: JsonSchema[T19], schema20: JsonSchema[T20], schema21: JsonSchema[T21], schema22: JsonSchema[T22]): JsonSchema[(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22)]
A JSON schema for a tuple of 22 elements.
A JSON schema for a tuple of 22 elements.
Tuples are represented with JSON arrays, as documented in https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation.
- Definition Classes
- TuplesSchemas
- implicit abstract def tuple2JsonSchema[T1, T2](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2]): JsonSchema[(T1, T2)]
A JSON schema for a tuple of 2 elements.
A JSON schema for a tuple of 2 elements.
Tuples are represented with JSON arrays, as documented in https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation.
- Definition Classes
- TuplesSchemas
- implicit abstract def tuple3JsonSchema[T1, T2, T3](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2], schema3: JsonSchema[T3]): JsonSchema[(T1, T2, T3)]
A JSON schema for a tuple of 3 elements.
A JSON schema for a tuple of 3 elements.
Tuples are represented with JSON arrays, as documented in https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation.
- Definition Classes
- TuplesSchemas
- implicit abstract def tuple4JsonSchema[T1, T2, T3, T4](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2], schema3: JsonSchema[T3], schema4: JsonSchema[T4]): JsonSchema[(T1, T2, T3, T4)]
A JSON schema for a tuple of 4 elements.
A JSON schema for a tuple of 4 elements.
Tuples are represented with JSON arrays, as documented in https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation.
- Definition Classes
- TuplesSchemas
- implicit abstract def tuple5JsonSchema[T1, T2, T3, T4, T5](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2], schema3: JsonSchema[T3], schema4: JsonSchema[T4], schema5: JsonSchema[T5]): JsonSchema[(T1, T2, T3, T4, T5)]
A JSON schema for a tuple of 5 elements.
A JSON schema for a tuple of 5 elements.
Tuples are represented with JSON arrays, as documented in https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation.
- Definition Classes
- TuplesSchemas
- implicit abstract def tuple6JsonSchema[T1, T2, T3, T4, T5, T6](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2], schema3: JsonSchema[T3], schema4: JsonSchema[T4], schema5: JsonSchema[T5], schema6: JsonSchema[T6]): JsonSchema[(T1, T2, T3, T4, T5, T6)]
A JSON schema for a tuple of 6 elements.
A JSON schema for a tuple of 6 elements.
Tuples are represented with JSON arrays, as documented in https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation.
- Definition Classes
- TuplesSchemas
- implicit abstract def tuple7JsonSchema[T1, T2, T3, T4, T5, T6, T7](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2], schema3: JsonSchema[T3], schema4: JsonSchema[T4], schema5: JsonSchema[T5], schema6: JsonSchema[T6], schema7: JsonSchema[T7]): JsonSchema[(T1, T2, T3, T4, T5, T6, T7)]
A JSON schema for a tuple of 7 elements.
A JSON schema for a tuple of 7 elements.
Tuples are represented with JSON arrays, as documented in https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation.
- Definition Classes
- TuplesSchemas
- implicit abstract def tuple8JsonSchema[T1, T2, T3, T4, T5, T6, T7, T8](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2], schema3: JsonSchema[T3], schema4: JsonSchema[T4], schema5: JsonSchema[T5], schema6: JsonSchema[T6], schema7: JsonSchema[T7], schema8: JsonSchema[T8]): JsonSchema[(T1, T2, T3, T4, T5, T6, T7, T8)]
A JSON schema for a tuple of 8 elements.
A JSON schema for a tuple of 8 elements.
Tuples are represented with JSON arrays, as documented in https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation.
- Definition Classes
- TuplesSchemas
- implicit abstract def tuple9JsonSchema[T1, T2, T3, T4, T5, T6, T7, T8, T9](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2], schema3: JsonSchema[T3], schema4: JsonSchema[T4], schema5: JsonSchema[T5], schema6: JsonSchema[T6], schema7: JsonSchema[T7], schema8: JsonSchema[T8], schema9: JsonSchema[T9]): JsonSchema[(T1, T2, T3, T4, T5, T6, T7, T8, T9)]
A JSON schema for a tuple of 9 elements.
A JSON schema for a tuple of 9 elements.
Tuples are represented with JSON arrays, as documented in https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation.
- Definition Classes
- TuplesSchemas
- abstract def withDescriptionEnum[A](enumeration: Enum[A], description: String): Enum[A]
Add a description to the given enumeration JSON schema
- abstract def withDescriptionJsonSchema[A](schema: JsonSchema[A], description: String): JsonSchema[A]
Add a description to the given JSON schema
- abstract def withDescriptionRecord[A](record: Record[A], description: String): Record[A]
Add a description to the given record JSON schema
- abstract def withDescriptionTagged[A](tagged: Tagged[A], description: String): Tagged[A]
Add a description to the given tagged JSON schema
- abstract def withDiscriminatorTagged[A](tagged: Tagged[A], discriminatorName: String): Tagged[A]
Allows to specify name of discriminator field for sum type
- abstract def withExampleEnum[A](enumeration: Enum[A], example: A): Enum[A]
Include an example value within the given enumeration JSON schema
- abstract def withExampleJsonSchema[A](schema: JsonSchema[A], example: A): JsonSchema[A]
Include an example value within the given JSON schema
- abstract def withExampleRecord[A](record: Record[A], example: A): Record[A]
Include an example value within the given record JSON schema
- abstract def withExampleTagged[A](tagged: Tagged[A], example: A): Tagged[A]
Include an example value within the given tagged JSON schema
- abstract def withTitleEnum[A](enumeration: Enum[A], title: String): Enum[A]
Add a title to the given enumeration JSON schema
- abstract def withTitleJsonSchema[A](schema: JsonSchema[A], title: String): JsonSchema[A]
Add a title to the given schema
- abstract def withTitleRecord[A](record: Record[A], title: String): Record[A]
Add a title to the given record JSON schema
- abstract def withTitleTagged[A](tagged: Tagged[A], title: String): Tagged[A]
Add a title to the given tagged JSON schema
- abstract def zipRecords[A, B](recordA: Record[A], recordB: Record[B])(implicit t: Tupler[A, B]): Record[Out]
The JSON schema of a record merging the fields of the two given records
- abstract def lazyRecord[A](schema: => Record[A], name: String): JsonSchema[A]
Captures a lazy reference to a JSON schema currently being defined:
Captures a lazy reference to a JSON schema currently being defined:
case class Recursive(next: Option[Recursive]) val recursiveSchema: Record[Recursive] = ( optField("next")(lazyRecord(recursiveSchema, "Rec")) ).xmap(Recursive)(_.next)
Interpreters should return a JsonSchema value that does not evaluate the given
schema
unless it is effectively used.- schema
The record JSON schema whose evaluation should be delayed
- name
A unique name identifying the schema
- Annotations
- @deprecated
- Deprecated
(Since version 1.4.0) Use
lazyRecord(name)(...)
instead
- abstract def lazyTagged[A](schema: => Tagged[A], name: String): JsonSchema[A]
Captures a lazy reference to a JSON schema currently being defined.
Captures a lazy reference to a JSON schema currently being defined.
Interpreters should return a JsonSchema value that does not evaluate the given
schema
unless it is effectively used.- schema
The tagged JSON schema whose evaluation should be delayed
- name
A unique name identifying the schema
- Annotations
- @deprecated
- Deprecated
(Since version 1.4.0) Use
lazyTagged(name)(...)
instead
Concrete Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- def +(other: String): String
- Implicit
- This member is added by an implicit conversion from JsonSchemas toany2stringadd[JsonSchemas] performed by method any2stringadd in scala.Predef.
- Definition Classes
- any2stringadd
- def ->[B](y: B): (JsonSchemas, B)
- Implicit
- This member is added by an implicit conversion from JsonSchemas toArrowAssoc[JsonSchemas] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
- Annotations
- @inline()
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def bigdecimalWithConstraintsJsonSchema(props: NumericConstraints[BigDecimal]): JsonSchema[BigDecimal]
A JSON schema for type
BigDecimal
where certain properties, such as minimum, maximum, etc.A JSON schema for type
BigDecimal
where certain properties, such as minimum, maximum, etc. are set. - def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @IntrinsicCandidate() @native()
- def defaultDiscriminatorName: String
Default discriminator field name for sum types.
Default discriminator field name for sum types.
It defaults to "type", but you can override it twofold: - by overriding this field you can change default discriminator name algebra-wide - by using
withDiscriminator
you can specify discriminator field name for specific sum type - implicit final def defaultStringJsonSchema: JsonSchema[String]
A JSON schema for type
String
- def doubleWithConstraintsJsonSchema(props: NumericConstraints[Double]): JsonSchema[Double]
A JSON schema for type
Double
where certain properties, such as minimum, maximum, etc.A JSON schema for type
Double
where certain properties, such as minimum, maximum, etc. are set. - implicit lazy val durationSchema: JsonSchema[Duration]
An ISO 8601 duration
An ISO 8601 duration
- See also
http://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.7.3.1
- def ensuring(cond: (JsonSchemas) => Boolean, msg: => Any): JsonSchemas
- Implicit
- This member is added by an implicit conversion from JsonSchemas toEnsuring[JsonSchemas] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- def ensuring(cond: (JsonSchemas) => Boolean): JsonSchemas
- Implicit
- This member is added by an implicit conversion from JsonSchemas toEnsuring[JsonSchemas] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- def ensuring(cond: Boolean, msg: => Any): JsonSchemas
- Implicit
- This member is added by an implicit conversion from JsonSchemas toEnsuring[JsonSchemas] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- def ensuring(cond: Boolean): JsonSchemas
- Implicit
- This member is added by an implicit conversion from JsonSchemas toEnsuring[JsonSchemas] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- def floatWithConstraintsJsonSchema(props: NumericConstraints[Float]): JsonSchema[Float]
A JSON schema for type
BigDecimal
where certain properties, such as minimum, maximum, etc.A JSON schema for type
BigDecimal
where certain properties, such as minimum, maximum, etc. are set. - final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @IntrinsicCandidate() @native()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @IntrinsicCandidate() @native()
- implicit lazy val instantJsonSchema: JsonSchema[Instant]
An ISO 8601 date-time in UTC
An ISO 8601 date-time in UTC
- See also
http://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.7.3.1
- final def intEnumeration[A](values: Seq[A])(encode: (A) => Int)(implicit tpe: JsonSchema[Int]): Enum[A]
Convenient constructor for enumerations represented by int values.
- def intWithConstraintsJsonSchema(props: NumericConstraints[Int]): JsonSchema[Int]
A JSON schema for type
Int
where certain properties, such as minimum, maximum, etc.A JSON schema for type
Int
where certain properties, such as minimum, maximum, etc. are set. - final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def lazyRecord[A](name: String)(schema: => Record[A]): Record[A]
Captures a lazy reference to a JSON schema currently being defined:
Captures a lazy reference to a JSON schema currently being defined:
case class Recursive(next: Option[Recursive]) val recursiveSchema: Record[Recursive] = lazyRecord("Rec") { optField("next")(recursiveSchema) }.xmap(Recursive(_))(_.next)
Interpreters should return a JsonSchema value that does not evaluate the given
schema
unless it is effectively used.- name
A unique name identifying the schema
- schema
The record JSON schema whose evaluation should be delayed
- def lazySchema[A](name: String)(schema: => JsonSchema[A]): JsonSchema[A]
A lazy JSON schema that can references schemas currently being defined:
A lazy JSON schema that can references schemas currently being defined:
case class Recursive(next: Option[Recursive]) val recursiveSchema: JsonSchema[Recursive] = lazySchema("Rec")( optField("next")(recursiveSchema) ).xmap(Recursive)(_.next)
Interpreters should return a JsonSchema value that does not evaluate the given
schema
unless it is effectively used.- name
A unique name identifying the schema
- schema
The record JSON schema whose evaluation should be delayed
- def lazyTagged[A](name: String)(schema: => Tagged[A]): Tagged[A]
Captures a lazy reference to a JSON schema currently being defined.
Captures a lazy reference to a JSON schema currently being defined.
Interpreters should return a JsonSchema value that does not evaluate the given
schema
unless it is effectively used.- name
A unique name identifying the schema
- schema
The tagged JSON schema whose evaluation should be delayed
- final def literal[A](value: A)(implicit tpe: JsonSchema[A]): JsonSchema[Unit]
A schema for a statically known value.
A schema for a statically known value.
- Decoder interpreters first try to decode incoming values with the given
tpe
schema, and then check that it is equal to the givenvalue
, - Encoder interpreters always produce the given
value
, encoded according totpe
, - Documentation interpreters enrich the JSON schema with a
const
property documenting its only possible value (or anenum
property with a single item).
This is useful to model schemas of objects containing extra fields that are absent from their Scala representation. For example, here is a schema for a GeoJSON point:
case class Point(lon: Double, lat: Double) val pointSchema = ( field("type")(literal("Point")) zip field[(Double, Double)]("coordinates") ).xmap(Point.tupled)(p => (p.lon, p.lat))
- Decoder interpreters first try to decode incoming values with the given
- def longWithConstraintsJsonSchema(props: NumericConstraints[Long]): JsonSchema[Long]
A JSON schema for type
Long
where certain properties, such as minimum, maximum, etc.A JSON schema for type
Long
where certain properties, such as minimum, maximum, etc. are set. - final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @IntrinsicCandidate() @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @IntrinsicCandidate() @native()
- implicit lazy val offsetDateTimeSchema: JsonSchema[OffsetDateTime]
An ISO8601 date-time
An ISO8601 date-time
- See also
http://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.7.3.1
- def optFieldWithDefault[A](name: String, defaultValue: A, docs: Option[String] = None)(implicit arg0: JsonSchema[A]): Record[A]
The JSON schema of a record with a single optional field with the given
name
The JSON schema of a record with a single optional field with the given
name
- Decoders fallback to the
defaultValue
if the field is absent from the decoded JSON object. They fail if the field is present but has an invalid value, - Encoders must emit the field if it is not
defaultValue
, but can choose to omit it when it has thedefaultValue
- Documentation interpreters produce the JSON schema of a JSON object with an
optional property of the given
name
.
- Decoders fallback to the
- def orElseMergeTagged[A, C >: A, B <: C](taggedA: Tagged[A], taggedB: Tagged[B])(implicit arg0: ClassTag[A], arg1: ClassTag[B]): Tagged[C]
The JSON schema of a coproduct that share the same parent type and thus can be widened to that parent type
- def preciseField[A](name: String, documentation: Option[String] = None)(implicit tpe: JsonSchema[A]): Record[PreciseField[A]]
The JSON schema of a record with a single field
name
of typeA
with fine control over presence and nullThe JSON schema of a record with a single field
name
of typeA
with fine control over presence and null- Encoder interpreters may produce a JSON object with one property of the given
name
, which can be set to thenull
value, - Decoder interpreters successfully decode
Absent
if the field is absent,Null
if it is present but has the valuenull
. They fail if the field is present but contains an invalid value, - Documentation interpreters produce the JSON schema of a JSON object with an
optional property of the given
name
.
- Encoder interpreters may produce a JSON object with one property of the given
- final def stringEnumeration[A](values: Seq[A])(encode: (A) => String)(implicit tpe: JsonSchema[String]): Enum[A]
Convenient constructor for enumerations represented by string values.
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- implicit final lazy val uuidJsonSchema: JsonSchema[UUID]
A JSON schema for type
UUID
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
Deprecated Value Members
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated
(Since version 9)
- def formatted(fmtstr: String): String
- Implicit
- This member is added by an implicit conversion from JsonSchemas toStringFormat[JsonSchemas] performed by method StringFormat in scala.Predef.
- Definition Classes
- StringFormat
- Annotations
- @deprecated @inline()
- Deprecated
(Since version 2.12.16) Use
formatString.format(value)
instead ofvalue.formatted(formatString)
, or use thef""
string interpolator. In Java 15 and later,formatted
resolves to the new method in String which has reversed parameters.
- def →[B](y: B): (JsonSchemas, B)
- Implicit
- This member is added by an implicit conversion from JsonSchemas toArrowAssoc[JsonSchemas] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
- Annotations
- @deprecated
- Deprecated
(Since version 2.13.0) Use
->
instead. If you still wish to display it as one character, consider using a font with programming ligatures such as Fira Code.
Inherited from endpoints4s.PartialInvariantFunctorSyntax
Inherited from endpoints4s.InvariantFunctorSyntax
Inherited from TuplesSchemas
Inherited from AnyRef
Inherited from Any
Inherited by implicit conversion any2stringadd fromJsonSchemas to any2stringadd[JsonSchemas]
Inherited by implicit conversion StringFormat fromJsonSchemas to StringFormat[JsonSchemas]
Inherited by implicit conversion Ensuring fromJsonSchemas to Ensuring[JsonSchemas]
Inherited by implicit conversion ArrowAssoc fromJsonSchemas to ArrowAssoc[JsonSchemas]
Types
Types introduced by the algebra
Operations
Operations creating and transforming values