diff options
author | Kweku Adams <kwekua@google.com> | 2018-02-22 15:05:48 -0800 |
---|---|---|
committer | Kweku Adams <kwekua@google.com> | 2018-02-22 17:48:23 -0800 |
commit | ecf4bdb4477d5fcc469c1c4ea7418e16e71037b8 (patch) | |
tree | 1b41e458a94385e2fa2eafb3bd5f03641e4454d3 /tools/incident_section_gen/main.cpp | |
parent | 414189fefe71beb998541cb2932b90f073ae8bcd (diff) |
Modifying proto csv output to include privacy levels.
Bug: 73775471
Test: use new output in go/irpf
Change-Id: Ib9e836e350f8d664ef66ecfe2539d15d164953be
Diffstat (limited to 'tools/incident_section_gen/main.cpp')
-rw-r--r-- | tools/incident_section_gen/main.cpp | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/tools/incident_section_gen/main.cpp b/tools/incident_section_gen/main.cpp index e7b269aaa9a5..636c22df8146 100644 --- a/tools/incident_section_gen/main.cpp +++ b/tools/incident_section_gen/main.cpp @@ -203,6 +203,18 @@ static inline Destination getFieldDest(const FieldDescriptor* field) { getMessageDest(field->message_type(), fieldDest); } +// Converts Destination to a string. +static inline string getDestString(const Destination dest) { + switch (dest) { + case DEST_AUTOMATIC: return "AUTOMATIC"; + case DEST_LOCAL: return "LOCAL"; + case DEST_EXPLICIT: return "EXPLICIT"; + // UNSET is considered EXPLICIT by default. + case DEST_UNSET: return "EXPLICIT"; + default: return "UNKNOWN"; + } +} + // Get Names =========================================================================================== static inline string getFieldName(const FieldDescriptor* field) { // replace . with double underscores to avoid name conflicts since fields use snake naming convention @@ -218,7 +230,7 @@ static inline string getMessageName(const Descriptor* descriptor, const Destinat // IsDefault ============================================================================================ // Returns true if a field is default. Default is defined as this field has same dest as its containing message. -// For message fields, it only looks at its field tag and own default mesaage tag, doesn't recursively go deeper. +// For message fields, it only looks at its field tag and own default message tag, doesn't recursively go deeper. static inline bool isDefaultField(const FieldDescriptor* field, const Destination containerDest) { Destination fieldDest = getFieldDest(field); if (field->type() != FieldDescriptor::TYPE_MESSAGE) { @@ -498,11 +510,12 @@ static string replace_string(const string& str, const char replace, const char w return result; } -static void generateCsv(Descriptor const* descriptor, const string& indent, set<string>* parents) { +static void generateCsv(Descriptor const* descriptor, const string& indent, set<string>* parents, const Destination containerDest = DEST_UNSET) { DebugStringOptions options; options.include_comments = true; for (int i=0; i<descriptor->field_count(); i++) { const FieldDescriptor* field = descriptor->field(i); + const Destination fieldDest = getFieldDest(field); stringstream text; if (field->type() == FieldDescriptor::TYPE_MESSAGE) { text << field->message_type()->name(); @@ -510,11 +523,18 @@ static void generateCsv(Descriptor const* descriptor, const string& indent, set< text << field->type_name(); } text << " " << field->name(); + text << " (PRIVACY="; + if (isDefaultField(field, containerDest)) { + text << getDestString(containerDest); + } else { + text << getDestString(fieldDest); + } + text << ")"; printf("%s%s,\n", indent.c_str(), replace_string(text.str(), '\n', ' ').c_str()); if (field->type() == FieldDescriptor::TYPE_MESSAGE && parents->find(field->message_type()->full_name()) == parents->end()) { parents->insert(field->message_type()->full_name()); - generateCsv(field->message_type(), indent + ",", parents); + generateCsv(field->message_type(), indent + ",", parents, fieldDest); parents->erase(field->message_type()->full_name()); } } @@ -543,7 +563,7 @@ int main(int argc, char const *argv[]) || field->number() == sectionId) { set<string> parents; printf("%s\n", field->name().c_str()); - generateCsv(field->message_type(), "", &parents); + generateCsv(field->message_type(), "", &parents, getFieldDest(field)); break; } } |