defmodule Absinthe.Type.Argument do
  @moduledoc """
  Used to define an argument.

  Usually these are defined using `Absinthe.Schema.Notation.arg/2`
  """

  alias Absinthe.Type

  @typedoc """
  Argument configuration

  * `:name` - The name of the argument, usually assigned automatically using `Absinthe.Schema.Notation.arg/2`.
  * `:type` - The type values the argument accepts/will coerce to.
  * `:deprecation` - Deprecation information for an argument, usually
    set-up using `Absinthe.Schema.Notation.deprecate/1`.
  * `:description` - Description of an argument, useful for introspection.

  The `__private__` and `__reference__` fields are for internal use.
  """
  @type t :: %__MODULE__{
          name: binary,
          type: Type.identifier_t(),
          default_value: any,
          deprecation: Type.Deprecation.t() | nil,
          description: binary | nil,
          definition: module,
          __reference__: Type.Reference.t(),
          __private__: Keyword.t()
        }

  defstruct identifier: nil,
            name: nil,
            description: nil,
            type: nil,
            deprecation: nil,
            default_value: nil,
            definition: nil,
            __reference__: nil,
            __private__: []
end
