module JSON::Pure::Generator::GeneratorMethods::Hash

def json_shift(state)

def json_shift(state)
  state.object_nl.empty? or return ''
  state.indent * state.depth
end

def json_transform(state)

def json_transform(state)
  delim = ",#{state.object_nl}"
  result = "{#{state.object_nl}"
  depth = state.depth += 1
  first = true
  indent = !state.object_nl.empty?
  each { |key, value|
    result << delim unless first
    result << state.indent * depth if indent
    result = "#{result}#{key.to_s.to_json(state)}#{state.space_before}:#{state.space}"
    if state.strict?
      raise GeneratorError, "#{value.class} not allowed in JSON"
    elsif value.respond_to?(:to_json)
      result << value.to_json(state)
    else
      result << %{"#{String(value)}"}
    end
    first = false
  }
  depth = state.depth -= 1
  unless first
    result << state.object_nl
    result << state.indent * depth if indent
  end
  result << '}'
  result
end

def to_json(state = nil, *)

_depth_ is used to find out nesting depth, to indent accordingly.
produced JSON string output further.
_state_ is a JSON::State object, that can also be used to configure the
this Hash instance.
Returns a JSON string containing a JSON object, that is unparsed from
def to_json(state = nil, *)
  state = State.from_state(state)
  state.check_max_nesting
  json_transform(state)
end