|
@@ -66,6 +66,7 @@ DefaultValueObjectWriter::DefaultValueObjectWriter(
|
|
|
root_(nullptr),
|
|
|
suppress_empty_list_(false),
|
|
|
preserve_proto_field_names_(false),
|
|
|
+ use_ints_for_enums_(false),
|
|
|
field_scrub_callback_(nullptr),
|
|
|
ow_(ow) {}
|
|
|
|
|
@@ -200,10 +201,10 @@ DefaultValueObjectWriter::Node* DefaultValueObjectWriter::CreateNewNode(
|
|
|
DefaultValueObjectWriter::Node* DefaultValueObjectWriter::CreateNewNode(
|
|
|
const string& name, const google::protobuf::Type* type, NodeKind kind,
|
|
|
const DataPiece& data, bool is_placeholder, const std::vector<string>& path,
|
|
|
- bool suppress_empty_list, bool preserve_proto_field_names,
|
|
|
+ bool suppress_empty_list, bool preserve_proto_field_names, bool use_ints_for_enums,
|
|
|
FieldScrubCallBack* field_scrub_callback) {
|
|
|
return new Node(name, type, kind, data, is_placeholder, path,
|
|
|
- suppress_empty_list, preserve_proto_field_names,
|
|
|
+ suppress_empty_list, preserve_proto_field_names, use_ints_for_enums,
|
|
|
field_scrub_callback);
|
|
|
}
|
|
|
|
|
@@ -220,12 +221,13 @@ DefaultValueObjectWriter::Node::Node(
|
|
|
path_(path),
|
|
|
suppress_empty_list_(suppress_empty_list),
|
|
|
preserve_proto_field_names_(false),
|
|
|
+ use_ints_for_enums_(false),
|
|
|
field_scrub_callback_(field_scrub_callback) {}
|
|
|
|
|
|
DefaultValueObjectWriter::Node::Node(
|
|
|
const string& name, const google::protobuf::Type* type, NodeKind kind,
|
|
|
const DataPiece& data, bool is_placeholder, const std::vector<string>& path,
|
|
|
- bool suppress_empty_list, bool preserve_proto_field_names,
|
|
|
+ bool suppress_empty_list, bool preserve_proto_field_names, bool use_ints_for_enums,
|
|
|
FieldScrubCallBack* field_scrub_callback)
|
|
|
: name_(name),
|
|
|
type_(type),
|
|
@@ -236,6 +238,7 @@ DefaultValueObjectWriter::Node::Node(
|
|
|
path_(path),
|
|
|
suppress_empty_list_(suppress_empty_list),
|
|
|
preserve_proto_field_names_(preserve_proto_field_names),
|
|
|
+ use_ints_for_enums_(use_ints_for_enums),
|
|
|
field_scrub_callback_(field_scrub_callback) {}
|
|
|
|
|
|
DefaultValueObjectWriter::Node* DefaultValueObjectWriter::Node::FindChild(
|
|
@@ -408,9 +411,9 @@ void DefaultValueObjectWriter::Node::PopulateChildren(
|
|
|
std::unique_ptr<Node> child(new Node(
|
|
|
preserve_proto_field_names_ ? field.name() : field.json_name(),
|
|
|
field_type, kind,
|
|
|
- kind == PRIMITIVE ? CreateDefaultDataPieceForField(field, typeinfo)
|
|
|
+ kind == PRIMITIVE ? CreateDefaultDataPieceForField(field, typeinfo, use_ints_for_enums_)
|
|
|
: DataPiece::NullData(),
|
|
|
- true, path, suppress_empty_list_, preserve_proto_field_names_,
|
|
|
+ true, path, suppress_empty_list_, preserve_proto_field_names_, use_ints_for_enums_,
|
|
|
field_scrub_callback_));
|
|
|
new_children.push_back(child.release());
|
|
|
}
|
|
@@ -435,7 +438,7 @@ void DefaultValueObjectWriter::MaybePopulateChildrenOfAny(Node* node) {
|
|
|
}
|
|
|
|
|
|
DataPiece DefaultValueObjectWriter::FindEnumDefault(
|
|
|
- const google::protobuf::Field& field, const TypeInfo* typeinfo) {
|
|
|
+ const google::protobuf::Field& field, const TypeInfo* typeinfo, bool use_ints_for_enums) {
|
|
|
if (!field.default_value().empty())
|
|
|
return DataPiece(field.default_value(), true);
|
|
|
|
|
@@ -448,12 +451,12 @@ DataPiece DefaultValueObjectWriter::FindEnumDefault(
|
|
|
}
|
|
|
// We treat the first value as the default if none is specified.
|
|
|
return enum_type->enumvalue_size() > 0
|
|
|
- ? DataPiece(enum_type->enumvalue(0).name(), true)
|
|
|
+ ? (use_ints_for_enums ? DataPiece(enum_type->enumvalue(0).number()) : DataPiece(enum_type->enumvalue(0).name(), true))
|
|
|
: DataPiece::NullData();
|
|
|
}
|
|
|
|
|
|
DataPiece DefaultValueObjectWriter::CreateDefaultDataPieceForField(
|
|
|
- const google::protobuf::Field& field, const TypeInfo* typeinfo) {
|
|
|
+ const google::protobuf::Field& field, const TypeInfo* typeinfo, bool use_ints_for_enums) {
|
|
|
switch (field.kind()) {
|
|
|
case google::protobuf::Field_Kind_TYPE_DOUBLE: {
|
|
|
return DataPiece(ConvertTo<double>(
|
|
@@ -496,7 +499,7 @@ DataPiece DefaultValueObjectWriter::CreateDefaultDataPieceForField(
|
|
|
field.default_value(), &DataPiece::ToUint32, static_cast<uint32>(0)));
|
|
|
}
|
|
|
case google::protobuf::Field_Kind_TYPE_ENUM: {
|
|
|
- return FindEnumDefault(field, typeinfo);
|
|
|
+ return FindEnumDefault(field, typeinfo, use_ints_for_enums);
|
|
|
}
|
|
|
default: { return DataPiece::NullData(); }
|
|
|
}
|
|
@@ -508,7 +511,7 @@ DefaultValueObjectWriter* DefaultValueObjectWriter::StartObject(
|
|
|
std::vector<string> path;
|
|
|
root_.reset(CreateNewNode(string(name), &type_, OBJECT,
|
|
|
DataPiece::NullData(), false, path,
|
|
|
- suppress_empty_list_, preserve_proto_field_names_,
|
|
|
+ suppress_empty_list_, preserve_proto_field_names_, use_ints_for_enums_,
|
|
|
field_scrub_callback_.get()));
|
|
|
root_->PopulateChildren(typeinfo_);
|
|
|
current_ = root_.get();
|
|
@@ -526,7 +529,7 @@ DefaultValueObjectWriter* DefaultValueObjectWriter::StartObject(
|
|
|
: nullptr),
|
|
|
OBJECT, DataPiece::NullData(), false,
|
|
|
child == nullptr ? current_->path() : child->path(),
|
|
|
- suppress_empty_list_, preserve_proto_field_names_,
|
|
|
+ suppress_empty_list_, preserve_proto_field_names_, use_ints_for_enums_,
|
|
|
field_scrub_callback_.get()));
|
|
|
child = node.get();
|
|
|
current_->AddChild(node.release());
|
|
@@ -559,7 +562,7 @@ DefaultValueObjectWriter* DefaultValueObjectWriter::StartList(
|
|
|
std::vector<string> path;
|
|
|
root_.reset(CreateNewNode(string(name), &type_, LIST, DataPiece::NullData(),
|
|
|
false, path, suppress_empty_list_,
|
|
|
- preserve_proto_field_names_,
|
|
|
+ preserve_proto_field_names_, use_ints_for_enums_,
|
|
|
field_scrub_callback_.get()));
|
|
|
current_ = root_.get();
|
|
|
return this;
|
|
@@ -570,7 +573,7 @@ DefaultValueObjectWriter* DefaultValueObjectWriter::StartList(
|
|
|
std::unique_ptr<Node> node(
|
|
|
CreateNewNode(string(name), nullptr, LIST, DataPiece::NullData(), false,
|
|
|
child == nullptr ? current_->path() : child->path(),
|
|
|
- suppress_empty_list_, preserve_proto_field_names_,
|
|
|
+ suppress_empty_list_, preserve_proto_field_names_, use_ints_for_enums_,
|
|
|
field_scrub_callback_.get()));
|
|
|
child = node.get();
|
|
|
current_->AddChild(node.release());
|
|
@@ -632,7 +635,7 @@ void DefaultValueObjectWriter::RenderDataPiece(StringPiece name,
|
|
|
std::unique_ptr<Node> node(
|
|
|
CreateNewNode(string(name), nullptr, PRIMITIVE, data, false,
|
|
|
child == nullptr ? current_->path() : child->path(),
|
|
|
- suppress_empty_list_, preserve_proto_field_names_,
|
|
|
+ suppress_empty_list_, preserve_proto_field_names_, use_ints_for_enums_,
|
|
|
field_scrub_callback_.get()));
|
|
|
current_->AddChild(node.release());
|
|
|
} else {
|