Module: JSON::TruffleRuby::Generator::GeneratorMethods::String

Defined in:
lib/json/truffle_ruby/generator.rb

Instance Method Summary collapse

Instance Method Details

#to_json(state = nil, *args) ⇒ Object

This string should be encoded with UTF-8 A call to this method returns a JSON string encoded with UTF16 big endian characters as u????.



697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
# File 'lib/json/truffle_ruby/generator.rb', line 697

def to_json(state = nil, *args)
  state = State.from_state(state)
  string = self

  if state.strict? && state.as_json
    unless Generator.valid_encoding?(string)
      string = state.as_json.call(string, false)
      unless string.is_a?(::String)
        return string.to_json(state, *args)
      end
    end
  end

  if string.encoding == ::Encoding::UTF_8
    unless string.valid_encoding?
      raise GeneratorError.new("source sequence is illegal/malformed utf-8", self)
    end
  else
    string = string.encode(::Encoding::UTF_8)
  end

  if state.ascii_only?
    %("#{JSON::TruffleRuby::Generator.utf8_to_json_ascii(string, state.script_safe)}")
  else
    %("#{JSON::TruffleRuby::Generator.utf8_to_json(string, state.script_safe)}")
  end
rescue Encoding::UndefinedConversionError => error
  raise ::JSON::GeneratorError.new(error.message, self)
end