defmodule GraphQL.Variable do @moduledoc """ A struct to represent GraphQL variables """ defstruct name: nil, type: nil, default_value: nil @typedoc """ A GraphQL generic name """ @type name() :: String.t() | atom() @typedoc """ A struct that represents the definition of a GraphQL variable. A variable definition exists within a query or mutation, and then can be referenced by the arguments of fields. """ @type t :: %__MODULE__{ name: name(), type: name(), default_value: any() } @doc """ Check if two variables represent the same variable """ @spec same?(t(), t()) :: boolean() def same?(%__MODULE__{} = a, %__MODULE__{} = b) do name_a = term_as_string(a.name) name_b = term_as_string(b.name) name_a == name_b end defp term_as_string(term) when is_atom(term), do: Atom.to_string(term) defp term_as_string(term) when is_binary(term), do: term end