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_CSHARP_GENERATOR_HELPERS_H
20 #define GRPC_INTERNAL_COMPILER_CSHARP_GENERATOR_HELPERS_H
21
22 #include "src/compiler/config.h"
23 #include "src/compiler/generator_helpers.h"
24
25 namespace grpc_csharp_generator {
26
ServicesFilename(const grpc::protobuf::FileDescriptor * file,const std::string & file_suffix,const bool base_namespace_present,const std::string & base_namespace,std::string & out_file,std::string * error)27 inline bool ServicesFilename(const grpc::protobuf::FileDescriptor* file,
28 const std::string& file_suffix,
29 const bool base_namespace_present,
30 const std::string& base_namespace,
31 std::string& out_file, std::string* error) {
32 // Support for base_namespace option is **experimental**.
33 //
34 // If base_namespace is provided then slightly different name mangling
35 // is used to generate the service file name. This is because this
36 // uses common code with protoc. For most file names this will not
37 // make a difference (only files with punctuation or numbers in the
38 // name.)
39 // Otherwise the behavior remains the same as before.
40 if (!base_namespace_present) {
41 out_file = grpc_generator::FileNameInUpperCamel(file, false) + file_suffix;
42 } else {
43 out_file = GRPC_CUSTOM_CSHARP_GETOUTPUTFILE(file, file_suffix, true,
44 base_namespace, error);
45 if (out_file.empty()) {
46 return false;
47 }
48 }
49 return true;
50 }
51
52 // Get leading or trailing comments in a string. Comment lines start with "// ".
53 // Leading detached comments are put in front of leading comments.
54 template <typename DescriptorType>
GetCsharpComments(const DescriptorType * desc,bool leading)55 inline std::string GetCsharpComments(const DescriptorType* desc, bool leading) {
56 return grpc_generator::GetPrefixedComments(desc, leading, "//");
57 }
58
59 } // namespace grpc_csharp_generator
60
61 #endif // GRPC_INTERNAL_COMPILER_CSHARP_GENERATOR_HELPERS_H
62