absinthe v1.1.5 Absinthe.Type.Interface

A defined interface type that represent a list of named fields and their arguments.

Fields on an interface have the same rules as fields on an Absinthe.Type.Object.

If an Absinthe.Type.Object lists an interface in its :interfaces entry, it it guarantees that it defines the same fields and arguments that the interface does.

Because sometimes it’s for the interface to determine the implementing type of a resolved object, you must either:

  • Provide a :resolve_type function on the interface
  • Provide a :is_type_of function on each implementing type
interface :named_entity do
  field :name, :string
  resolve_type fn
    %{age: _}, _ -> {:ok, :person}
    %{employee_count: _}, _ -> {:ok, :business}
    _ -> :error
  end
end

object :person do
  field :name, :string
  field :age, :string

  interface :named_entity
end

object :business do
  field :name, :string
  field :employee_count, :integer

  interface :named_entity
end

The :resolve_type function will be passed two arguments; the object whose type needs to be identified, and the Absinthe.Execution struct providing the full execution context.

The :__reference__ key is for internal use.

Summary

Functions

Callback implementation for c:Absinthe.Introspection.Kind.kind/0

Whether the interface (or implementors) are correctly configured to resolve objects

Types

t :: %{name: binary, description: binary, fields: map, resolve_type: (any, Absinthe.Execution.t -> atom | nil), __reference__: Absinthe.Type.Reference.t}

Functions

build(map)
implements?(interface, type)

Specs

kind()

Callback implementation for c:Absinthe.Introspection.Kind.kind/0.

resolve_type(arg1, obj, env)

Specs

resolve_type(Absinthe.Type.Interface.t, any, Absinthe.Execution.Field.t) ::
  Absinthe.Type.t |
  nil
type_resolvable?(schema, iface)

Specs

type_resolvable?(Absinthe.Schema.t, t) :: boolean

Whether the interface (or implementors) are correctly configured to resolve objects.