mirror of
https://github.com/LukeHagar/libopenapi.git
synced 2025-12-06 04:20:11 +00:00
58 lines
2.2 KiB
Go
58 lines
2.2 KiB
Go
// Copyright 2022 Princess B33f Heavy Industries / Dave Shanley
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package base
|
|
|
|
import (
|
|
"github.com/pb33f/libopenapi/datamodel/high"
|
|
"github.com/pb33f/libopenapi/datamodel/low"
|
|
lowBase "github.com/pb33f/libopenapi/datamodel/low/base"
|
|
"github.com/pb33f/libopenapi/orderedmap"
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
// Discriminator is only used by OpenAPI 3+ documents, it represents a polymorphic discriminator used for schemas
|
|
//
|
|
// When request bodies or response payloads may be one of a number of different schemas, a discriminator object can be
|
|
// used to aid in serialization, deserialization, and validation. The discriminator is a specific object in a schema
|
|
// which is used to inform the consumer of the document of an alternative schema based on the value associated with it.
|
|
//
|
|
// When using the discriminator, inline schemas will not be considered.
|
|
//
|
|
// v3 - https://spec.openapis.org/oas/v3.1.0#discriminator-object
|
|
type Discriminator struct {
|
|
PropertyName string `json:"propertyName,omitempty" yaml:"propertyName,omitempty"`
|
|
Mapping *orderedmap.Map[string, string] `json:"mapping,omitempty" yaml:"mapping,omitempty"`
|
|
low *lowBase.Discriminator
|
|
}
|
|
|
|
// NewDiscriminator will create a new high-level Discriminator from a low-level one.
|
|
func NewDiscriminator(disc *lowBase.Discriminator) *Discriminator {
|
|
d := new(Discriminator)
|
|
d.low = disc
|
|
d.PropertyName = disc.PropertyName.Value
|
|
d.Mapping = low.FromReferenceMap(disc.Mapping.Value)
|
|
return d
|
|
}
|
|
|
|
// GoLow returns the low-level Discriminator used to build the high-level one.
|
|
func (d *Discriminator) GoLow() *lowBase.Discriminator {
|
|
return d.low
|
|
}
|
|
|
|
// GoLowUntyped will return the low-level Discriminator instance that was used to create the high-level one, with no type
|
|
func (d *Discriminator) GoLowUntyped() any {
|
|
return d.low
|
|
}
|
|
|
|
// Render will return a YAML representation of the Discriminator object as a byte slice.
|
|
func (d *Discriminator) Render() ([]byte, error) {
|
|
return yaml.Marshal(d)
|
|
}
|
|
|
|
// MarshalYAML will create a ready to render YAML representation of the Discriminator object.
|
|
func (d *Discriminator) MarshalYAML() (interface{}, error) {
|
|
nb := high.NewNodeBuilder(d, d.low)
|
|
return nb.Render(), nil
|
|
}
|