// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. #ifndef RUNTIME_VM_JSON_WRITER_H_ #define RUNTIME_VM_JSON_WRITER_H_ #include "platform/allocation.h" #include "platform/text_buffer.h" namespace dart { class String; class JSONWriter : ValueObject { public: explicit JSONWriter(intptr_t buf_size = 256); TextBuffer* buffer() { return &buffer_; } const char* ToCString() { return buffer_.buffer(); } void Steal(char** buffer, intptr_t* buffer_length); void PrintCommaIfNeeded(); // Append |serialized_object| to the stream. void AppendSerializedObject(const char* serialized_object); // Append |buffer| to the stream. void AppendSerializedObject(const uint8_t* buffer, intptr_t buffer_length); // Append |serialized_object| to the stream with |property_name|. void AppendSerializedObject(const char* property_name, const char* serialized_object); void OpenObject(const char* property_name = NULL); void CloseObject(); void UncloseObject(); void OpenArray(const char* property_name = NULL); void CloseArray(); void Clear(); void PrintValueNull(); void PrintValueBool(bool b); void PrintValue(intptr_t i); void PrintValue64(int64_t i); void PrintValue(double d); void PrintValueBase64(const uint8_t* bytes, intptr_t length); void PrintValue(const char* s); void PrintValue(const char* s, intptr_t len); void PrintValueNoEscape(const char* s); void PrintfValue(const char* format, ...) PRINTF_ATTRIBUTE(2, 3); void VPrintfValue(const char* format, va_list args); bool PrintValueStr(const String& s, intptr_t offset, intptr_t count); void PrintPropertyBool(const char* name, bool b); void PrintProperty(const char* name, intptr_t i); void PrintProperty64(const char* name, int64_t i); void PrintProperty(const char* name, double d); void PrintPropertyBase64(const char* name, const uint8_t* bytes, intptr_t length); void PrintProperty(const char* name, const char* s); bool PrintPropertyStr(const char* name, const String& s, intptr_t offset = 0, intptr_t count = -1); void PrintPropertyNoEscape(const char* name, const char* s); void PrintfProperty(const char* name, const char* format, ...) PRINTF_ATTRIBUTE(3, 4); void VPrintfProperty(const char* name, const char* format, va_list args); void PrintPropertyName(const char* name); void PrintNewline(); void AddEscapedUTF8String(const char* s); void AddEscapedUTF8String(const char* s, intptr_t len); private: bool NeedComma(); bool AddDartString(const String& s, intptr_t offset, intptr_t count); // Debug only fatal assertion. static void EnsureIntegerIsRepresentableInJavaScript(int64_t i); intptr_t open_objects_; TextBuffer buffer_; }; } // namespace dart #endif // RUNTIME_VM_JSON_WRITER_H_