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????.



742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
# File 'lib/json/truffle_ruby/generator.rb', line 742

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