34 #ifndef GRPC_INTERNAL_COMPILER_GENERATOR_HELPERS_H
35 #define GRPC_INTERNAL_COMPILER_GENERATOR_HELPERS_H
39 #include "src/compiler/config.h"
41 namespace grpc_generator {
43 inline bool StripSuffix(grpc::string *filename,
const grpc::string &suffix) {
44 if (filename->length() >= suffix.length()) {
45 size_t suffix_pos = filename->length() - suffix.length();
46 if (filename->compare(suffix_pos, grpc::string::npos, suffix) == 0) {
47 filename->resize(filename->size() - suffix.size());
55 inline grpc::string StripProto(grpc::string filename) {
56 if (!StripSuffix(&filename,
".protodevel")) {
57 StripSuffix(&filename,
".proto");
62 inline grpc::string StringReplace(grpc::string str,
const grpc::string &from,
63 const grpc::string &to) {
67 pos = str.find(from, pos);
68 if (pos == grpc::string::npos) {
71 str.replace(pos, from.length(), to);
78 inline std::vector<grpc::string> tokenize(
const grpc::string &input,
79 const grpc::string &delimiters) {
80 std::vector<grpc::string> tokens;
81 size_t pos, last_pos = 0;
85 pos = input.find_first_of(delimiters, last_pos);
86 if (pos == grpc::string::npos) {
91 tokens.push_back(input.substr(last_pos, pos - last_pos));
92 if (done)
return tokens;
98 inline grpc::string CapitalizeFirstLetter(grpc::string s) {
102 s[0] = ::toupper(s[0]);
106 inline grpc::string LowerUnderscoreToUpperCamel(grpc::string str) {
107 std::vector<grpc::string> tokens = tokenize(str,
"_");
108 grpc::string result =
"";
109 for (
unsigned int i = 0; i < tokens.size(); i++) {
110 result += CapitalizeFirstLetter(tokens[i]);
115 inline grpc::string FileNameInUpperCamel(
const grpc::protobuf::FileDescriptor *file) {
116 return LowerUnderscoreToUpperCamel(StripProto(file->name()));
120 METHODTYPE_NO_STREAMING,
121 METHODTYPE_CLIENT_STREAMING,
122 METHODTYPE_SERVER_STREAMING,
123 METHODTYPE_BIDI_STREAMING
126 inline MethodType GetMethodType(
const grpc::protobuf::MethodDescriptor *method) {
127 if (method->client_streaming()) {
128 if (method->server_streaming()) {
129 return METHODTYPE_BIDI_STREAMING;
131 return METHODTYPE_CLIENT_STREAMING;
134 if (method->server_streaming()) {
135 return METHODTYPE_SERVER_STREAMING;
137 return METHODTYPE_NO_STREAMING;
144 #endif // GRPC_INTERNAL_COMPILER_GENERATOR_HELPERS_H