resolve comments
diff --git a/src/compiler/generator_helpers.h b/src/compiler/generator_helpers.h
index 9ba7356..6b02b37 100644
--- a/src/compiler/generator_helpers.h
+++ b/src/compiler/generator_helpers.h
@@ -34,6 +34,7 @@
#ifndef GRPC_INTERNAL_COMPILER_GENERATOR_HELPERS_H
#define GRPC_INTERNAL_COMPILER_GENERATOR_HELPERS_H
+#include <iostream>
#include <map>
#include <sstream>
#include <string>
@@ -203,6 +204,7 @@
out->push_back("");
}
} else {
+ std::cerr << "Unknown comment type " << type << std::endl;
abort();
}
}
@@ -230,10 +232,49 @@
out->push_back("");
}
} else {
+ std::cerr << "Unknown comment type " << type << std::endl;
abort();
}
}
+namespace {
+
+// Prefix comment line with "// " and concatenate them into a string.
+grpc::string GenerateComments(const std::vector<grpc::string> &in) {
+ std::ostringstream oss;
+ for (const grpc::string &elem : in) {
+ if (elem.empty()) {
+ oss << "//\n";
+ } else if (elem[0] == ' ') {
+ oss << "//" << elem << "\n";
+ } else {
+ oss << "// " << elem << "\n";
+ }
+ }
+ return oss.str();
+}
+
+} // namespace
+
+// Get leading or trailing comments in a string. Comment lines start with "// ".
+// Leading detached comments are put in in front of leading comments.
+template <typename DescriptorType>
+inline grpc::string GetComments(const DescriptorType *desc, bool leading) {
+ std::vector<grpc::string> out;
+ if (leading) {
+ grpc_generator::GetComment(
+ desc, grpc_generator::COMMENTTYPE_LEADING_DETACHED, &out);
+ std::vector<grpc::string> leading;
+ grpc_generator::GetComment(desc, grpc_generator::COMMENTTYPE_LEADING,
+ &leading);
+ out.insert(out.end(), leading.begin(), leading.end());
+ } else {
+ grpc_generator::GetComment(desc, grpc_generator::COMMENTTYPE_TRAILING,
+ &out);
+ }
+ return GenerateComments(out);
+}
+
} // namespace grpc_generator
#endif // GRPC_INTERNAL_COMPILER_GENERATOR_HELPERS_H