JsonSchemas

An interpreter for endpoints4s.algebra.JsonSchemas that produces Play JSON play.api.libs.json.Reads and play.api.libs.json.Writes.

class Object
trait Matchable
class Any

Type members

Classlikes

object JsonSchema
Companion:
class
trait JsonSchema[A]
Companion:
object
object Record
Companion:
class
trait Record[A] extends JsonSchema[A]
Companion:
object
trait Tagged[A] extends Record[A]

Inherited classlikes

final implicit class EnumOps[A](enumA: Enum[A]) extends JsonSchemaDocumentationOps[A]
Inherited from:
JsonSchemas
implicit class InvariantFunctorSyntax[A, F[_]](val fa: F[A])(implicit ev: InvariantFunctor[F])

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.

Inherited from:
InvariantFunctorSyntax

Documentation related methods for annotating schemas. Encoder and decoder interpreters ignore this information.

Documentation related methods for annotating schemas. Encoder and decoder interpreters ignore this information.

Inherited from:
JsonSchemas
final implicit class JsonSchemaOps[A](schemaA: JsonSchema[A]) extends JsonSchemaDocumentationOps[A]

Implicit methods for values of type JsonSchema

Implicit methods for values of type JsonSchema

Inherited from:
JsonSchemas
implicit class PartialInvariantFunctorSyntax[A, F[_]](val fa: F[A])(implicit ev: PartialInvariantFunctor[F])
final implicit class RecordOps[A](recordA: Record[A]) extends JsonSchemaDocumentationOps[A]

Implicit methods for values of type Record

Implicit methods for values of type Record

Inherited from:
JsonSchemas
final implicit class TaggedOps[A](taggedA: Tagged[A]) extends JsonSchemaDocumentationOps[A]
Inherited from:
JsonSchemas

Types

type Enum[A] = JsonSchema[A]

Value members

Concrete methods

def choiceTagged[A, B](taggedA: Tagged[A], taggedB: Tagged[B]): Tagged[Either[A, B]]
def enumeration[A](values: Seq[A])(jsonSchema: JsonSchema[A]): JsonSchema[A]
def field[A](name: String, documentation: Option[String])(implicit tpe: JsonSchema[A]): Record[A]
Definition Classes
def lazyRecord[A](schema: => Record[A], name: String): JsonSchema[A]
override def lazyRecord[A](name: String)(schema: => Record[A]): Record[A]
Definition Classes
override def lazySchema[A](name: String)(schema: => JsonSchema[A]): JsonSchema[A]
Definition Classes
def lazyTagged[A](schema: => Tagged[A], name: String): JsonSchema[A]
override def lazyTagged[A](name: String)(schema: => Tagged[A]): Tagged[A]
Definition Classes
Definition Classes
def optField[A](name: String, documentation: Option[String])(implicit tpe: JsonSchema[A]): Record[Option[A]]
def orFallbackToJsonSchema[A, B](schemaA: JsonSchema[A], schemaB: JsonSchema[B]): JsonSchema[Either[A, B]]
def taggedRecord[A](recordA: Record[A], tag: String): Tagged[A]
def withDiscriminatorTagged[A](tagged: Tagged[A], discriminatorName: String): Tagged[A]
def zipRecords[A, B](recordA: Record[A], recordB: Record[B])(implicit t: Tupler[A, B]): Record[Out]

Inherited methods

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
Inherited from:
JsonSchemas
final def intEnumeration[A](values: Seq[A])(encode: A => Int)(implicit tpe: JsonSchema[Int]): JsonSchema[A]

Convenient constructor for enumerations represented by int values.

Convenient constructor for enumerations represented by int values.

Inherited from:
JsonSchemas
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 given value,
  • Encoder interpreters always produce the given value, encoded according to tpe,
  • Documentation interpreters enrich the JSON schema with a const property documenting its only possible value (or an enum 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))
Inherited from:
JsonSchemas
def namedEnum[A](enumeration: JsonSchema[A], name: String): JsonSchema[A]
Inherited from:
NoDocsJsonSchemas
def namedRecord[A](record: Record[A], name: String): Record[A]
Inherited from:
NoDocsJsonSchemas
def namedTagged[A](tagged: Tagged[A], name: String): Tagged[A]
Inherited from:
NoDocsJsonSchemas
def optFieldWithDefault[A : JsonSchema](name: String, defaultValue: A, docs: Option[String]): 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 the defaultValue
  • Documentation interpreters produce the JSON schema of a JSON object with an optional property of the given name.
Inherited from:
JsonSchemas
def orElseMergeTagged[A : ClassTag, C >: A, B <: C : ClassTag](taggedA: Tagged[A], taggedB: Tagged[B]): Tagged[C]

The JSON schema of a coproduct that share the same parent type and thus can be widened to that parent type

The JSON schema of a coproduct that share the same parent type and thus can be widened to that parent type

Inherited from:
JsonSchemas
final def stringEnumeration[A](values: Seq[A])(encode: A => String)(implicit tpe: JsonSchema[String]): JsonSchema[A]

Convenient constructor for enumerations represented by string values.

Convenient constructor for enumerations represented by string values.

Inherited from:
JsonSchemas
def withDescriptionEnum[A](enumeration: JsonSchema[A], description: String): JsonSchema[A]
Inherited from:
NoDocsJsonSchemas
def withDescriptionJsonSchema[A](schema: JsonSchema[A], description: String): JsonSchema[A]
Inherited from:
NoDocsJsonSchemas
def withDescriptionRecord[A](record: Record[A], description: String): Record[A]
Inherited from:
NoDocsJsonSchemas
def withDescriptionTagged[A](tagged: Tagged[A], description: String): Tagged[A]
Inherited from:
NoDocsJsonSchemas
def withExampleEnum[A](enumeration: JsonSchema[A], example: A): JsonSchema[A]
Inherited from:
NoDocsJsonSchemas
def withExampleJsonSchema[A](schema: JsonSchema[A], example: A): JsonSchema[A]
Inherited from:
NoDocsJsonSchemas
def withExampleRecord[A](record: Record[A], example: A): Record[A]
Inherited from:
NoDocsJsonSchemas
def withExampleTagged[A](tagged: Tagged[A], example: A): Tagged[A]
Inherited from:
NoDocsJsonSchemas
def withTitleEnum[A](enumeration: JsonSchema[A], title: String): JsonSchema[A]
Inherited from:
NoDocsJsonSchemas
def withTitleJsonSchema[A](schema: JsonSchema[A], title: String): JsonSchema[A]
Inherited from:
NoDocsJsonSchemas
def withTitleRecord[A](record: Record[A], title: String): Record[A]
Inherited from:
NoDocsJsonSchemas
def withTitleTagged[A](tagged: Tagged[A], title: String): Tagged[A]
Inherited from:
NoDocsJsonSchemas

Implicits

Implicits

implicit def arrayJsonSchema[C <: (Iterable), A](implicit jsonSchema: JsonSchema[A], factory: Factory[A, C[A]]): JsonSchema[C[A]]
implicit lazy val doubleJsonSchema: JsonSchema[Double]
implicit lazy val floatJsonSchema: JsonSchema[Float]
implicit lazy val intJsonSchema: JsonSchema[Int]
implicit lazy val longJsonSchema: JsonSchema[Long]
implicit def mapJsonSchema[A](implicit jsonSchema: JsonSchema[A]): JsonSchema[Map[String, A]]

Inherited implicits

final implicit def EnumOps[A](enumA: JsonSchema[A]): EnumOps[A]
Inherited from:
JsonSchemas
final implicit def InvariantFunctorSyntax[A, F[_]](fa: F[A])(implicit ev: InvariantFunctor[F]): InvariantFunctorSyntax[A, F]

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.

Inherited from:
InvariantFunctorSyntax
final implicit def JsonSchemaOps[A](schemaA: JsonSchema[A]): JsonSchemaOps[A]

Implicit methods for values of type JsonSchema

Implicit methods for values of type JsonSchema

Inherited from:
JsonSchemas
final implicit def PartialInvariantFunctorSyntax[A, F[_]](fa: F[A])(implicit ev: PartialInvariantFunctor[F]): PartialInvariantFunctorSyntax[A, F]
final implicit def RecordOps[A](recordA: Record[A]): RecordOps[A]

Implicit methods for values of type Record

Implicit methods for values of type Record

Inherited from:
JsonSchemas
final implicit def TaggedOps[A](taggedA: Tagged[A]): TaggedOps[A]
Inherited from:
JsonSchemas

A JSON schema for type String

A JSON schema for type String

Inherited from:
JsonSchemas
implicit 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)]
Inherited from:
TuplesSchemas
implicit 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)]
Inherited from:
TuplesSchemas
implicit 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)]
Inherited from:
TuplesSchemas
implicit 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)]
Inherited from:
TuplesSchemas
implicit 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)]
Inherited from:
TuplesSchemas
implicit 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)]
Inherited from:
TuplesSchemas
implicit 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)]
Inherited from:
TuplesSchemas
implicit 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)]
Inherited from:
TuplesSchemas
implicit 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)]
Inherited from:
TuplesSchemas
implicit 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)]
Inherited from:
TuplesSchemas
implicit 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)]
Inherited from:
TuplesSchemas
implicit 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)]
Inherited from:
TuplesSchemas
implicit 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)]
Inherited from:
TuplesSchemas
implicit def tuple2JsonSchema[T1, T2](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2]): JsonSchema[(T1, T2)]
Inherited from:
TuplesSchemas
implicit def tuple3JsonSchema[T1, T2, T3](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2], schema3: JsonSchema[T3]): JsonSchema[(T1, T2, T3)]
Inherited from:
TuplesSchemas
implicit def tuple4JsonSchema[T1, T2, T3, T4](implicit schema1: JsonSchema[T1], schema2: JsonSchema[T2], schema3: JsonSchema[T3], schema4: JsonSchema[T4]): JsonSchema[(T1, T2, T3, T4)]
Inherited from:
TuplesSchemas
implicit 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)]
Inherited from:
TuplesSchemas
implicit 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)]
Inherited from:
TuplesSchemas
implicit 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)]
Inherited from:
TuplesSchemas
implicit 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)]
Inherited from:
TuplesSchemas
implicit 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)]
Inherited from:
TuplesSchemas