lib/open_api/spec/schema/discriminator.ex

defmodule OpenAPI.Spec.Schema.Discriminator do
  @moduledoc "Raw schema discriminator from the OpenAPI spec"

  #
  # Definition
  #

  @type t :: %__MODULE__{
          property_name: String.t(),
          mapping: %{optional(String.t()) => String.t()}
        }

  defstruct [
    :property_name,
    :mapping
  ]

  #
  # Decoder
  #

  @doc false
  @spec decode(map, map) :: {map, t}
  def decode(state, yaml) do
    discriminator = %__MODULE__{
      property_name: Map.fetch!(yaml, "propertyName"),
      mapping: Map.get(yaml, "mapping", %{})
    }

    {state, discriminator}
  end
end