lib/absinthe/schema/prototype.ex

defmodule Absinthe.Schema.Prototype do
  @moduledoc """
  Provides the directives available for SDL schema definitions.

  By default, the only directive provided is `@deprecated`, which supports
  a `reason` argument (of GraphQL type `String`). This can be used to
  mark a field

  To add additional schema directives, define your own prototype schema, e.g.:

  ```
  defmodule MyAppWeb.SchemaPrototype do
    use Absinthe.Schema.Prototype

    directive :feature do
      arg :name, non_null(:string)
      on [:interface]
      # Define `expand`, etc.
    end

    # More directives...
  end
  ```

  Then, set it as the prototype for your schema:

  ```
  defmodule MyAppWeb.Schema do
    use Absinthe.Schema

    @prototype_schema MyAppWeb.SchemaPrototype

    # Use `import_sdl`, etc...
  end
  ```
  """
  use __MODULE__.Notation

  defmacro __using__(opts \\ []) do
    __MODULE__.Notation.content(opts)
  end
end