class Appsignal::Utils::JSON

@api private

def encode_utf8(value)

def encode_utf8(value)
  value.encode(
    "utf-8".freeze,
    :invalid => :replace,
    :undef   => :replace
  )
end

def generate(body)

def generate(body)
  ::JSON.generate(jsonify(body))
end

def jsonify(value)

def jsonify(value)
  case value
  when String
    encode_utf8(value)
  when Numeric, NilClass, TrueClass, FalseClass
    value
  when Hash
    value.each_with_object({}) do |(k, v), hash|
      hash[jsonify(k)] = jsonify(v)
    end
  when Array
    value.map { |v| jsonify(v) }
  else
    jsonify(value.to_s)
  end
end