1 | /* |
2 | * |
3 | * Copyright 2015 gRPC authors. |
4 | * |
5 | * Licensed under the Apache License, Version 2.0 (the "License"); |
6 | * you may not use this file except in compliance with the License. |
7 | * You may obtain a copy of the License at |
8 | * |
9 | * http://www.apache.org/licenses/LICENSE-2.0 |
10 | * |
11 | * Unless required by applicable law or agreed to in writing, software |
12 | * distributed under the License is distributed on an "AS IS" BASIS, |
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
14 | * See the License for the specific language governing permissions and |
15 | * limitations under the License. |
16 | * |
17 | */ |
18 | |
19 | #ifndef GRPC_INTERNAL_COMPILER_CPP_GENERATOR_HELPERS_H |
20 | #define GRPC_INTERNAL_COMPILER_CPP_GENERATOR_HELPERS_H |
21 | |
22 | #include <map> |
23 | |
24 | #include "src/compiler/config.h" |
25 | #include "src/compiler/generator_helpers.h" |
26 | |
27 | namespace grpc_cpp_generator { |
28 | |
29 | inline grpc::string DotsToColons(const grpc::string& name) { |
30 | return grpc_generator::StringReplace(name, "." , "::" ); |
31 | } |
32 | |
33 | inline grpc::string DotsToUnderscores(const grpc::string& name) { |
34 | return grpc_generator::StringReplace(name, "." , "_" ); |
35 | } |
36 | |
37 | inline grpc::string ClassName(const grpc::protobuf::Descriptor* descriptor, |
38 | bool qualified) { |
39 | // Find "outer", the descriptor of the top-level message in which |
40 | // "descriptor" is embedded. |
41 | const grpc::protobuf::Descriptor* outer = descriptor; |
42 | while (outer->containing_type() != NULL) outer = outer->containing_type(); |
43 | |
44 | const grpc::string& outer_name = outer->full_name(); |
45 | grpc::string inner_name = descriptor->full_name().substr(outer_name.size()); |
46 | |
47 | if (qualified) { |
48 | return "::" + DotsToColons(outer_name) + DotsToUnderscores(inner_name); |
49 | } else { |
50 | return outer->name() + DotsToUnderscores(inner_name); |
51 | } |
52 | } |
53 | |
54 | // Get leading or trailing comments in a string. Comment lines start with "// ". |
55 | // Leading detached comments are put in front of leading comments. |
56 | template <typename DescriptorType> |
57 | inline grpc::string (const DescriptorType* desc, bool leading) { |
58 | return grpc_generator::GetPrefixedComments(desc, leading, "//" ); |
59 | } |
60 | |
61 | } // namespace grpc_cpp_generator |
62 | |
63 | #endif // GRPC_INTERNAL_COMPILER_CPP_GENERATOR_HELPERS_H |
64 | |