CoproductEncoding

This object contains the options for how to encode coproduct JSON schemas.

The following Scala coproduct is the candidate example. Each encoding option includes the schema that it would generate for that example.

sealed trait Pet
case class Cat(name: String) extends Pet
case class Lizard(lovesRocks: Boolean) extends Pet
Companion:
class
trait Sum
trait Mirror
class Object
trait Matchable
class Any

Type members

Classlikes

case object OneOf extends CoproductEncoding

Strategy defining the base type schema in terms of oneOf and the variant schemas. The variants themselves don't refer to the base type, but they do include the discriminator field.

Strategy defining the base type schema in terms of oneOf and the variant schemas. The variants themselves don't refer to the base type, but they do include the discriminator field.

  • simpler looking schemas in Swagger UI
  • some OpenAPI clients don't handle oneOf properly

Using the Pet example above, this strategy yields the following:

"schemas": {
 "Pet": {
   "oneOf": [
     { "$ref": "#/components/schemas/Cat" },
     { "$ref": "#/components/schemas/Lizard" }
   ],
   "discriminator": {
     "propertyName": "type",
     "mapping": {
       "Cat": "#/components/schemas/Cat",
       "Lizard": "#/components/schemas/Lizard"
     }
   }
 },

 "Cat": {
   "type": "object",
   "properties": {
     "type": {
       "type": "string",
       "enum": [ "Cat" ]
     },
     "name": {
       "type": "string"
     }
   },
   "required": [
     "type",
     "name"
   ]
 },

 "Lizard": {
   "type": "object",
   "properties": {
     "type": {
       "type": "string",
       "enum": [ "Lizard" ]
     },
     "lovesRocks": {
       "type": "boolean"
     }
   },
   "required": [
     "type",
     "lovesRocks"
   ]
 }
}

Strategy that extends OneOf so that each variant also refers back to the base type schema using allOf. This approach is sometimes referred to in OpenAPI 3 as a way to model polymorphism.

Strategy that extends OneOf so that each variant also refers back to the base type schema using allOf. This approach is sometimes referred to in OpenAPI 3 as a way to model polymorphism.

  • compatible with OpenAPI clients that don't handle oneOf properly
  • more complex schemas in Swagger UI

Using the Pet example above, this strategy yields the following:

"schemas": {
 "Pet": {
   "oneOf": [
     { "$ref": "#/components/schemas/Cat" },
     { "$ref": "#/components/schemas/Lizard" }
   ],
   "discriminator": {
     "propertyName": "type",
     "mapping": {
       "Cat": "#/components/schemas/Cat",
       "Lizard": "#/components/schemas/Lizard"
     }
   }
 },

 "Cat": {
   "allOf": [
     { "$ref": "#/components/schemas/Pet" },
     {
       "type": "object",
       "properties": {
         "type": {
           "type": "string",
           "enum": [ "Cat" ]
         },
         "name": {
           "type": "string"
         }
       },
       "required": [
         "type",
         "name"
       ]
     }
   ]
 },

 "Lizard": {
   "allOf": [
     { "$ref": "#/components/schemas/Pet" },
     {
       "type": "object",
       "properties": {
         "type": {
           "type": "string",
           "enum": [ "Lizard" ]
         },
         "lovesRocks": {
           "type": "boolean"
         }
       },
       "required": [
         "type",
         "lovesRocks"
       ]
     }
   ]
 }
}

Inherited types

type MirroredElemLabels <: Tuple

The names of the product elements

The names of the product elements

Inherited from:
Mirror

The name of the type

The name of the type

Inherited from:
Mirror