31 #ifndef GOOGLE_PROTOBUF_UTIL_CONVERTER_JSON_OBJECTWRITER_H__
32 #define GOOGLE_PROTOBUF_UTIL_CONVERTER_JSON_OBJECTWRITER_H__
38 #include <google/protobuf/io/coded_stream.h>
39 #include <google/protobuf/util/internal/structured_objectwriter.h>
40 #include <google/protobuf/stubs/bytestream.h>
43 #include <google/protobuf/port_def.inc>
91 class PROTOBUF_EXPORT JsonObjectWriter :
public StructuredObjectWriter {
97 indent_string_(indent_string),
100 use_websafe_base64_for_bytes_(
false) {
102 if (!indent_string.
empty()) {
103 indent_char_ = indent_string[0];
104 indent_count_ = indent_string.
length();
105 for (
int i = 1;
i < indent_string.
length();
i++) {
106 if (indent_char_ != indent_string_[
i]) {
137 use_websafe_base64_for_bytes_ =
value;
141 class PROTOBUF_EXPORT Element :
public BaseElement {
146 is_json_object_(is_json_object) {}
164 bool is_json_object_;
194 WriteRawString(
value);
200 element_.reset(
new Element(element_.release(),
false));
205 element_.reset(
new Element(element_.release(),
true));
210 bool needs_newline = !element_->is_first();
211 element_.reset(element_->pop<
Element>());
212 if (needs_newline) NewLine();
218 if (!indent_string_.empty()) {
219 size_t len =
sizeof(
'\n') + (indent_string_.size() *
element()->level());
225 if (indent_count_ > 0) {
229 if (
out !=
nullptr) {
235 for (
int i = 0;
i <
element()->level();
i++) {
236 stream_->WriteRaw(indent_string_.c_str(), indent_string_.length());
252 stream_->WriteRaw(s.data(), s.length());
255 std::unique_ptr<Element> element_;
257 ByteSinkWrapper
sink_;
266 bool use_websafe_base64_for_bytes_;
276 #include <google/protobuf/port_undef.inc>
278 #endif // GOOGLE_PROTOBUF_UTIL_CONVERTER_JSON_OBJECTWRITER_H__