defmodule Absinthe.Type.Enum.Value do
  @moduledoc """
  A possible value for an enum.

  See `Absinthe.Type.Enum` and `Absinthe.Schema.Notation.value/1`.
  """

  alias Absinthe.Type

  @typedoc """
  A defined enum value entry.

  Generally defined using `Absinthe.Schema.Notation.value/2` as
  part of a schema.

  * `:name` - The name of the value. This is also the incoming, external
    value that will be provided by query documents.
  * `:description` - A nice description for introspection.
  * `:value` - The raw, internal value that `:name` map to. This will be
    provided as the argument value to `resolve` functions.
  * `:deprecation` - Deprecation information for a value, usually
    set-up using the `Absinthe.Schema.Notation.deprecate/1` convenience
    function.

  The `__private__` and `__reference__` fields are for internal use.
  """
  @type t :: %{
          name: binary,
          description: binary,
          value: any,
          enum_identifier: atom,
          deprecation: Type.Deprecation.t() | nil,
          __reference__: Type.Reference.t(),
          __private__: Keyword.t()
        }
  defstruct name: nil,
            description: nil,
            value: nil,
            deprecation: nil,
            enum_identifier: nil,
            __reference__: nil,
            __private__: []
end
