t

endpoints.algebra

JsonSchemas

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
Type Hierarchy
Ordering
  1. Grouped
  2. Alphabetic
  3. By Inheritance
Inherited
  1. JsonSchemas
  2. PartialInvariantFunctorSyntax
  3. InvariantFunctorSyntax
  4. TuplesSchemas
  5. AnyRef
  6. Any
Implicitly
  1. by StringFormat
  2. by Ensuring
  3. by ArrowAssoc
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Type Members

  1. implicit class InvariantFunctorSyntax[A, F[_]] extends AnyRef

    Extension methods for values of type F[A] for which there is an implicit InvariantFunctor[F] instance.

    Extension methods for values of type F[A] for which there is an implicit InvariantFunctor[F] instance.

    Definition Classes
    InvariantFunctorSyntax
  2. implicit class PartialInvariantFunctorSyntax[A, F[_]] extends AnyRef
  3. abstract type Enum[A] <: JsonSchema[A]

    A JSON schema for enumerations, i.e.

    A JSON schema for enumerations, i.e. types that have a restricted set of values.

    Note

    This type has implicit methods provided by the EnumOps class.

  4. implicit final class EnumOps[A] extends JsonSchemaDocumentationOps[A]

  5. abstract type JsonSchema[A]

    The JSON schema of a type A

    The JSON schema of a type A

    Note

    This type has implicit methods provided by the PartialInvariantFunctorSyntax, InvariantFunctorSyntax, and JsonSchemaOps classes.

  6. 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.

  7. implicit final class JsonSchemaOps[A] extends JsonSchemaDocumentationOps[A]

    Implicit methods for values of type JsonSchema

  8. abstract type Record[A] <: JsonSchema[A]

    The JSON schema of a record type (case class) A

    The JSON schema of a record type (case class) A

    Note

    This type has implicit methods provided by the PartialInvariantFunctorSyntax, InvariantFunctorSyntax, and RecordOps classes.

  9. implicit final class RecordOps[A] extends JsonSchemaDocumentationOps[A]

    Implicit methods for values of type Record

  10. abstract type Tagged[A] <: JsonSchema[A]

    A JSON schema containing the name of the type A.

    A JSON schema containing the name of the type A. Tagged schemas are useful to describe sum types (sealed traits).

    Note

    This type has implicit methods provided by the PartialInvariantFunctorSyntax, InvariantFunctorSyntax, and TaggedOps classes.

  11. implicit final class TaggedOps[A] extends JsonSchemaDocumentationOps[A]

Abstract Value Members

  1. implicit abstract def arrayJsonSchema[C[X] <: Seq[X], A](implicit jsonSchema: JsonSchema[A], factory: Factory[A, C[A]]): JsonSchema[C[A]]

    A JSON schema for sequences

  2. implicit abstract def bigdecimalJsonSchema: JsonSchema[BigDecimal]

    A JSON schema for type BigDecimal

  3. implicit abstract def booleanJsonSchema: JsonSchema[Boolean]

    A JSON schema for type Boolean

  4. implicit abstract def byteJsonSchema: JsonSchema[Byte]

    A JSON schema for type Byte

  5. 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

  6. implicit abstract def doubleJsonSchema: JsonSchema[Double]

    A JSON schema for type Double

  7. implicit abstract def emptyRecord: Record[Unit]

    The JSON schema of a record with no fields

  8. abstract def enumeration[A](values: Seq[A])(tpe: JsonSchema[A]): Enum[A]

    Promotes a schema to an enumeration.

    Promotes a schema to an enumeration. Decoding fails if the input string does not match the encoded values of any of the possible values. Encoding does never fail, even if the value is not contained in the set of possible values.

  9. 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 type A

  10. implicit abstract def floatJsonSchema: JsonSchema[Float]

    A JSON schema for type Float

  11. implicit abstract def intJsonSchema: JsonSchema[Int]

    A JSON schema for type Int

  12. implicit abstract def jsonSchemaPartialInvFunctor: PartialInvariantFunctor[JsonSchema]

    Provides xmap and xmapPartial operations.

    Provides xmap and xmapPartial operations.

    See also

    PartialInvariantFunctorSyntax and InvariantFunctorSyntax

  13. 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

  14. 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

  15. implicit abstract def longJsonSchema: JsonSchema[Long]

    A JSON schema for type Long

  16. implicit abstract def mapJsonSchema[A](implicit jsonSchema: JsonSchema[A]): JsonSchema[Map[String, A]]

    A JSON schema for maps with string keys

  17. abstract def namedEnum[A](schema: Enum[A], name: String): Enum[A]

    Annotates the enum JSON schema with a name

  18. abstract def namedRecord[A](schema: Record[A], name: String): Record[A]

    Annotates the record JSON schema with a name

  19. abstract def namedTagged[A](schema: Tagged[A], name: String): Tagged[A]

    Annotates the tagged JSON schema with a name

  20. 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 type A

    The JSON schema of a record with a single optional field name of type A

    Decoder interpreters successfully decode None if the field is absent or if it is present but has the value null. Decoder interpreters fail if the field is present but contains an invalid value. Encoder interpreters can omit the field or emit a field with a null value. Documentation interpreters must mark the field as optional.

  21. abstract def orFallbackToJsonSchema[A, B](schemaA: JsonSchema[A], schemaB: JsonSchema[B]): JsonSchema[Either[A, B]]

    A schema that can be either schemaA or schemaB.

    A schema that can be either schemaA or schemaB.

    Documentation interpreter produce a oneOf JSON schema. Encoder interpreters forward to either schemaA or schemaB. Decoder interpreters first try to decode with schemaA, and fallback to schemaB 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 and B (none must be a subtype of the other), otherwise, a value of type B might also be successfully decoded as a value of type A, and this could have surprising consequences.

  22. implicit abstract def recordPartialInvFunctor: PartialInvariantFunctor[Record]

    Provides xmap and xmapPartial operations.

    Provides xmap and xmapPartial operations.

    See also

    PartialInvariantFunctorSyntax and InvariantFunctorSyntax

  23. 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

    See also

    https://json-schema.org/understanding-json-schema/reference/string.html#format

  24. implicit abstract def taggedPartialInvFunctor: PartialInvariantFunctor[Tagged]

    Provides xmap and xmapPartial operations.

    Provides xmap and xmapPartial operations.

    See also

    PartialInvariantFunctorSyntax and InvariantFunctorSyntax

  25. abstract def taggedRecord[A](recordA: Record[A], tag: String): Tagged[A]

    Tags a schema for type A with the given tag name

  26. 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
  27. 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
  28. 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
  29. 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
  30. 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
  31. 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
  32. 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
  33. 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
  34. 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
  35. 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
  36. 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
  37. 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
  38. 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
  39. 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
  40. 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
  41. 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
  42. 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
  43. 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
  44. 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
  45. 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
  46. 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
  47. abstract def withDescriptionEnum[A](enum: Enum[A], description: String): Enum[A]

    Add a description to the given enum JSON schema

  48. abstract def withDescriptionJsonSchema[A](schema: JsonSchema[A], description: String): JsonSchema[A]

    Add a description to the given JSON schema

  49. abstract def withDescriptionRecord[A](record: Record[A], description: String): Record[A]

    Add a description to the given record JSON schema

  50. abstract def withDescriptionTagged[A](tagged: Tagged[A], description: String): Tagged[A]

    Add a description to the given tagged JSON schema

  51. abstract def withDiscriminatorTagged[A](tagged: Tagged[A], discriminatorName: String): Tagged[A]

    Allows to specify name of discriminator field for sum type

  52. abstract def withExampleEnum[A](enum: Enum[A], example: A): Enum[A]

    Include an example value within the given enum JSON schema

  53. abstract def withExampleJsonSchema[A](schema: JsonSchema[A], example: A): JsonSchema[A]

    Include an example value within the given JSON schema

  54. abstract def withExampleRecord[A](record: Record[A], example: A): Record[A]

    Include an example value within the given record JSON schema

  55. abstract def withExampleTagged[A](tagged: Tagged[A], example: A): Tagged[A]

    Include an example value within the given tagged JSON schema

  56. abstract def withTitleEnum[A](enum: Enum[A], title: String): Enum[A]

    Add a title to the given enum JSON schema

  57. abstract def withTitleJsonSchema[A](schema: JsonSchema[A], title: String): JsonSchema[A]

    Add a title to the given schema

  58. abstract def withTitleRecord[A](record: Record[A], title: String): Record[A]

    Add a title to the given record JSON schema

  59. abstract def withTitleTagged[A](tagged: Tagged[A], title: String): Tagged[A]

    Add a title to the given tagged JSON schema

  60. 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

Concrete Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int
    Definition Classes
    AnyRef → Any
  3. 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()
  4. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  5. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  6. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.CloneNotSupportedException]) @native()
  7. 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

  8. implicit final def defaultStringJsonSchema: JsonSchema[String]

    A JSON schema for type String

  9. 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
  10. 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
  11. 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
  12. 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
  13. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  14. def equals(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef → Any
  15. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.Throwable])
  16. 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
    @inline()
  17. final def getClass(): Class[_ <: AnyRef]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  18. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  19. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  20. 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.

    Encoders always produce the given value, encoded according to tpe. Decoders first try to decode incoming values with the given tpe schema, and then check that it is equal to the given value.

    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))
  21. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  22. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  23. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  24. final def stringEnumeration[A](values: Seq[A])(encode: (A) => String)(implicit tpe: JsonSchema[String]): Enum[A]

    Convenient constructor for enumerations represented by string values.

  25. final def synchronized[T0](arg0: => T0): T0
    Definition Classes
    AnyRef
  26. def toString(): String
    Definition Classes
    AnyRef → Any
  27. implicit final lazy val uuidJsonSchema: JsonSchema[UUID]

    A JSON schema for type UUID

  28. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  29. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  30. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException]) @native()

Deprecated Value Members

  1. 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 TuplesSchemas

Inherited from AnyRef

Inherited from Any

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

Ungrouped