|
|
@@ -65,6 +65,7 @@ DefaultValueObjectWriter::DefaultValueObjectWriter(
|
|
|
current_(NULL),
|
|
|
root_(NULL),
|
|
|
suppress_empty_list_(false),
|
|
|
+ preserve_proto_field_names_(false),
|
|
|
field_scrub_callback_(NULL),
|
|
|
ow_(ow) {}
|
|
|
|
|
|
@@ -191,7 +192,8 @@ void DefaultValueObjectWriter::RegisterFieldScrubCallBack(
|
|
|
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, FieldScrubCallBack* field_scrub_callback)
|
|
|
+ bool suppress_empty_list, bool preserve_proto_field_names,
|
|
|
+ FieldScrubCallBack* field_scrub_callback)
|
|
|
: name_(name),
|
|
|
type_(type),
|
|
|
kind_(kind),
|
|
|
@@ -200,6 +202,7 @@ DefaultValueObjectWriter::Node::Node(
|
|
|
is_placeholder_(is_placeholder),
|
|
|
path_(path),
|
|
|
suppress_empty_list_(suppress_empty_list),
|
|
|
+ preserve_proto_field_names_(preserve_proto_field_names),
|
|
|
field_scrub_callback_(field_scrub_callback) {}
|
|
|
|
|
|
DefaultValueObjectWriter::Node* DefaultValueObjectWriter::Node::FindChild(
|
|
|
@@ -369,10 +372,12 @@ void DefaultValueObjectWriter::Node::PopulateChildren(
|
|
|
// If the child field is of primitive type, sets its data to the default
|
|
|
// value of its type.
|
|
|
google::protobuf::scoped_ptr<Node> child(new Node(
|
|
|
- field.json_name(), field_type, kind,
|
|
|
+ preserve_proto_field_names_ ? field.name() : field.json_name(),
|
|
|
+ field_type, kind,
|
|
|
kind == PRIMITIVE ? CreateDefaultDataPieceForField(field, typeinfo)
|
|
|
: DataPiece::NullData(),
|
|
|
- true, path, suppress_empty_list_, field_scrub_callback_));
|
|
|
+ true, path, suppress_empty_list_, preserve_proto_field_names_,
|
|
|
+ field_scrub_callback_));
|
|
|
new_children.push_back(child.release());
|
|
|
}
|
|
|
// Adds all leftover nodes in children_ to the beginning of new_child.
|
|
|
@@ -469,6 +474,7 @@ DefaultValueObjectWriter* DefaultValueObjectWriter::StartObject(
|
|
|
std::vector<string> path;
|
|
|
root_.reset(new Node(name.ToString(), &type_, OBJECT, DataPiece::NullData(),
|
|
|
false, path, suppress_empty_list_,
|
|
|
+ preserve_proto_field_names_,
|
|
|
field_scrub_callback_.get()));
|
|
|
root_->PopulateChildren(typeinfo_);
|
|
|
current_ = root_.get();
|
|
|
@@ -485,7 +491,8 @@ DefaultValueObjectWriter* DefaultValueObjectWriter::StartObject(
|
|
|
: NULL),
|
|
|
OBJECT, DataPiece::NullData(), false,
|
|
|
child == NULL ? current_->path() : child->path(),
|
|
|
- suppress_empty_list_, field_scrub_callback_.get()));
|
|
|
+ suppress_empty_list_, preserve_proto_field_names_,
|
|
|
+ field_scrub_callback_.get()));
|
|
|
child = node.get();
|
|
|
current_->AddChild(node.release());
|
|
|
}
|
|
|
@@ -517,6 +524,7 @@ DefaultValueObjectWriter* DefaultValueObjectWriter::StartList(
|
|
|
std::vector<string> path;
|
|
|
root_.reset(new Node(name.ToString(), &type_, LIST, DataPiece::NullData(),
|
|
|
false, path, suppress_empty_list_,
|
|
|
+ preserve_proto_field_names_,
|
|
|
field_scrub_callback_.get()));
|
|
|
current_ = root_.get();
|
|
|
return this;
|
|
|
@@ -527,7 +535,8 @@ DefaultValueObjectWriter* DefaultValueObjectWriter::StartList(
|
|
|
google::protobuf::scoped_ptr<Node> node(
|
|
|
new Node(name.ToString(), NULL, LIST, DataPiece::NullData(), false,
|
|
|
child == NULL ? current_->path() : child->path(),
|
|
|
- suppress_empty_list_, field_scrub_callback_.get()));
|
|
|
+ suppress_empty_list_, preserve_proto_field_names_,
|
|
|
+ field_scrub_callback_.get()));
|
|
|
child = node.get();
|
|
|
current_->AddChild(node.release());
|
|
|
}
|
|
|
@@ -588,7 +597,8 @@ void DefaultValueObjectWriter::RenderDataPiece(StringPiece name,
|
|
|
google::protobuf::scoped_ptr<Node> node(
|
|
|
new Node(name.ToString(), NULL, PRIMITIVE, data, false,
|
|
|
child == NULL ? current_->path() : child->path(),
|
|
|
- suppress_empty_list_, field_scrub_callback_.get()));
|
|
|
+ suppress_empty_list_, preserve_proto_field_names_,
|
|
|
+ field_scrub_callback_.get()));
|
|
|
current_->AddChild(node.release());
|
|
|
} else {
|
|
|
child->set_data(data);
|