50 #include <google/protobuf/port_def.inc>
96 options.preserve_proto_field_names);
100 if (
options.always_print_primitive_fields) {
104 options.preserve_proto_field_names);
106 options.always_print_enums_as_ints);
107 return proto_source.
WriteTo(&default_value_writer);
109 return proto_source.
WriteTo(&json_writer);
125 class StatusErrorListener :
public converter::ErrorListener {
127 StatusErrorListener() {}
128 ~StatusErrorListener()
override {}
132 void InvalidName(
const converter::LocationTrackerInterface& loc,
133 StringPiece unknown_name,
134 StringPiece
message)
override {
136 if (!loc_string.empty()) {
137 loc_string.append(
" ");
144 void InvalidValue(
const converter::LocationTrackerInterface& loc,
145 StringPiece type_name,
146 StringPiece
value)
override {
149 StrCat(GetLocString(loc),
": invalid value ",
string(
value),
150 " for type ",
string(type_name)));
153 void MissingField(
const converter::LocationTrackerInterface& loc,
154 StringPiece missing_name)
override {
156 StrCat(GetLocString(loc),
": missing field ",
163 std::string GetLocString(
const converter::LocationTrackerInterface& loc) {
166 if (!loc_string.empty()) {
167 loc_string =
StrCat(
"(", loc_string,
")");
184 StatusErrorListener listener;
190 options.case_insensitive_enum_parsing;
192 resolver,
type, &sink, &listener, proto_writer_options);
198 if (
length == 0)
continue;
204 return listener.GetStatus();
220 TypeResolver* generated_type_resolver_ =
NULL;
225 message.GetDescriptor()->full_name();
228 void DeleteGeneratedTypeResolver() {
delete generated_type_resolver_; }
230 void InitGeneratedTypeResolver() {
236 TypeResolver* GetGeneratedTypeResolver() {
238 InitGeneratedTypeResolver);
239 return generated_type_resolver_;
248 ? GetGeneratedTypeResolver()
264 ? GetGeneratedTypeResolver()
272 "JSON transcoder produced invalid protobuf output.");