xref: /aosp_15_r20/external/grpc-grpc/src/compiler/csharp_generator_helpers.h (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
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