dart-sdk/runtime/vm/json_writer.h
Derek Xu 8df1b88877 [VM/Service] Create JSONBase64String class
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>
2023-04-17 15:58:28 +00:00

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_