mirror of
https://github.com/dart-lang/sdk
synced 2024-11-02 06:20:13 +00:00
8df1b88877
TEST=CI Change-Id: Ia14fcb1788a2685bef4fd61babfdd7089dd85a06 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/287801 Reviewed-by: Ben Konyi <bkonyi@google.com> Commit-Queue: Derek Xu <derekx@google.com>
104 lines
3.5 KiB
C++
104 lines
3.5 KiB
C++
// 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 |buffer| to the stream.
|
|
void AppendBytes(const uint8_t* buffer, intptr_t buffer_length);
|
|
|
|
// Append the Base64 encoding of |bytes| to the stream.
|
|
//
|
|
// Beware that padding characters are added when |length| is not a multiple of
|
|
// three. Padding is only valid at the end of Base64 strings, so you must be
|
|
// careful when trying to populate a single Base64 string with multiple calls
|
|
// to this method. |JSONBase64String| should be used for that use-case,
|
|
// because it handles padding management.
|
|
void AppendBytesInBase64(const uint8_t* bytes, intptr_t length);
|
|
|
|
// Append |serialized_object| to the stream.
|
|
void AppendSerializedObject(const char* serialized_object);
|
|
|
|
// 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 = nullptr);
|
|
void CloseObject();
|
|
void UncloseObject();
|
|
|
|
void OpenArray(const char* property_name = nullptr);
|
|
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_
|