- DateTimeType =
          
        
- GraphQL::ScalarType.define do
  name 'DateTime'
  coerce_result ->(value, _ctx) { Time.zone.parse(value) }
end
- HashType =
          
        
- GraphQL::ScalarType.define do
  name 'Hash'
  coerce_result ->(value, _ctx) {
    return value if value.is_a? Array
    return value.to_h if value.respond_to?(:to_h)
    return JSON.parse(value) if value.is_a? String
    raise ArgumentError, "Cannot coerce value '#{value}' to a hash"
  }
end
- CoordinatesType =
          
        
- GraphQL::ObjectType.define do
  name 'Coordinates'
  field :lat, !types.Float, hash_key: 'lat'
  field :lon, !types.Float, hash_key: 'lon'
end 
- StringQueryOperatorInput =
          
        
- GraphQL::InputObjectType.define do
  name 'StringQueryOperatorInput'
  argument :eq, types.String
end 
- QueryOperatorInput =
          
        
- ->(type) do
  map = {
    'String' => StringQueryOperatorInput
          }
  map[type.unwrap.name]
end
- FilterInputType =
          
        
- ->(schema_type) do
  GraphQL::InputObjectType.define do
    name "#{schema_type.name}FilterInput"
    schema_type.fields.each do |(name, field)|
      next unless input_type = QueryOperatorInput.call(field.type)
      argument name, input_type
    end
  end
end
- BuildUnionType =
          
        
- ->(from_types, union_type_name) do
  possible_types = from_types.values.reject { |t| t.is_a? GraphQL::UnionType }
  GraphQL::UnionType.define do
    name union_type_name
    possible_types possible_types
  end
end