summaryrefslogtreecommitdiff
path: root/tools/incident_section_gen
diff options
context:
space:
mode:
Diffstat (limited to 'tools/incident_section_gen')
-rw-r--r--tools/incident_section_gen/main.cpp28
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;
}
}