<% module_namespacing_when_supported do -%>
class <%= schema_name %> < GraphQL::Schema
  query(Types::QueryType)

  # Opt in to the new runtime (default in future graphql-ruby versions)
  use GraphQL::Execution::Interpreter
  use GraphQL::Analysis::AST

  # Add built-in connections for pagination
  use GraphQL::Pagination::Connections
<% if options[:relay] %>
  # Relay Object Identification:

  # Return a string UUID for `object`
  def self.id_from_object(object, type_definition, query_ctx)
    # Here's a simple implementation which:
    # - joins the type name & object.id
    # - encodes it with base64:
    # GraphQL::Schema::UniqueWithinType.encode(type_definition.name, object.id)
  end

  # Given a string UUID, find the object
  def self.object_from_id(id, query_ctx)
    # For example, to decode the UUIDs generated above:
    # type_name, item_id = GraphQL::Schema::UniqueWithinType.decode(id)
    #
    # Then, based on `type_name` and `id`
    # find an object in your application
    # ...
  end

  # Object Resolution
  def self.resolve_type(type, obj, ctx)
    # TODO: Implement this function
    # to return the correct type for `obj`
    raise(GraphQL::RequiredImplementationMissingError)
  end
<% end %><% if options[:batch] %>
  # GraphQL::Batch setup:
  use GraphQL::Batch
<% end %>end
<% end -%>
