module GraphQL::Compatibility::ExecutionSpecification::CounterSchema

def self.build(execution_strategy)

def self.build(execution_strategy)
  counter_type = nil
  schema = nil
  has_count_interface = GraphQL::InterfaceType.define do
    name "HasCount"
    field :count, types.Int
    field :counter, ->{ has_count_interface }
  end
  counter_type = GraphQL::ObjectType.define do
    name "Counter"
    interfaces [has_count_interface]
    field :count, types.Int, resolve: ->(o,a,c) { schema.metadata[:count] += 1 }
    field :counter, has_count_interface, resolve: ->(o,a,c) { :counter }
  end
  alt_counter_type = GraphQL::ObjectType.define do
    name "AltCounter"
    interfaces [has_count_interface]
    field :count, types.Int, resolve: ->(o,a,c) { schema.metadata[:count] += 1 }
    field :counter, has_count_interface, resolve: ->(o,a,c) { :counter }
  end
  has_counter_interface = GraphQL::InterfaceType.define do
    name "HasCounter"
    field :counter, has_count_interface
  end
  query_type = GraphQL::ObjectType.define do
    name "Query"
    interfaces [has_counter_interface]
    field :counter, has_count_interface, resolve: ->(o,a,c) { :counter }
  end
  schema = GraphQL::Schema.define(
    query: query_type,
    resolve_type: ->(o, c) { o == :counter ? counter_type : nil },
    orphan_types: [alt_counter_type, counter_type],
    query_execution_strategy: execution_strategy,
  )
  schema.metadata[:count] = 0
  schema
end