OneOf

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.

  • 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"
   ]
 }
}
trait Singleton
trait Product
trait Mirror
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
OneOf.type

Type members

Inherited types

type MirroredElemLabels = EmptyTuple
Inherited from:
Singleton
type MirroredElemTypes = EmptyTuple
Inherited from:
Singleton

The name of the type

The name of the type

Inherited from:
Mirror
type MirroredMonoType = Singleton
Inherited from:
Singleton
type MirroredType = Singleton
Inherited from:
Singleton

Value members

Inherited methods

def fromProduct(p: Product): MirroredMonoType
Inherited from:
Singleton
Inherited from:
Product