Skip to content
Snippets Groups Projects
Commit 4e0f73cd authored by Jan Tattermusch's avatar Jan Tattermusch
Browse files

add internal_access option for C# codegen

parent 5f8872f8
No related branches found
No related tags found
No related merge requests found
...@@ -123,6 +123,10 @@ std::string GetMethodRequestParamMaybe(const MethodDescriptor *method, ...@@ -123,6 +123,10 @@ std::string GetMethodRequestParamMaybe(const MethodDescriptor *method,
return GetClassName(method->input_type()) + " request, "; return GetClassName(method->input_type()) + " request, ";
} }
std::string GetAccessLevel(bool internal_access) {
return internal_access ? "internal" : "public";
}
std::string GetMethodReturnTypeClient(const MethodDescriptor *method) { std::string GetMethodReturnTypeClient(const MethodDescriptor *method) {
switch (GetMethodType(method)) { switch (GetMethodType(method)) {
case METHODTYPE_NO_STREAMING: case METHODTYPE_NO_STREAMING:
...@@ -528,8 +532,10 @@ void GenerateNewStubMethods(Printer* out, const ServiceDescriptor *service) { ...@@ -528,8 +532,10 @@ void GenerateNewStubMethods(Printer* out, const ServiceDescriptor *service) {
} }
void GenerateService(Printer* out, const ServiceDescriptor *service, void GenerateService(Printer* out, const ServiceDescriptor *service,
bool generate_client, bool generate_server) { bool generate_client, bool generate_server,
out->Print("public static class $classname$\n", "classname", bool internal_access) {
out->Print("$access_level$ static class $classname$\n", "access_level",
GetAccessLevel(internal_access), "classname",
GetServiceClassName(service)); GetServiceClassName(service));
out->Print("{\n"); out->Print("{\n");
out->Indent(); out->Indent();
...@@ -567,7 +573,7 @@ void GenerateService(Printer* out, const ServiceDescriptor *service, ...@@ -567,7 +573,7 @@ void GenerateService(Printer* out, const ServiceDescriptor *service,
} // anonymous namespace } // anonymous namespace
grpc::string GetServices(const FileDescriptor *file, bool generate_client, grpc::string GetServices(const FileDescriptor *file, bool generate_client,
bool generate_server) { bool generate_server, bool internal_access) {
grpc::string output; grpc::string output;
{ {
// Scope the output stream so it closes and finalizes output to the string. // Scope the output stream so it closes and finalizes output to the string.
...@@ -595,7 +601,8 @@ grpc::string GetServices(const FileDescriptor *file, bool generate_client, ...@@ -595,7 +601,8 @@ grpc::string GetServices(const FileDescriptor *file, bool generate_client,
out.Print("namespace $namespace$ {\n", "namespace", GetFileNamespace(file)); out.Print("namespace $namespace$ {\n", "namespace", GetFileNamespace(file));
out.Indent(); out.Indent();
for (int i = 0; i < file->service_count(); i++) { for (int i = 0; i < file->service_count(); i++) {
GenerateService(&out, file->service(i), generate_client, generate_server); GenerateService(&out, file->service(i), generate_client, generate_server,
internal_access);
} }
out.Outdent(); out.Outdent();
out.Print("}\n"); out.Print("}\n");
......
...@@ -41,7 +41,8 @@ ...@@ -41,7 +41,8 @@
namespace grpc_csharp_generator { namespace grpc_csharp_generator {
grpc::string GetServices(const grpc::protobuf::FileDescriptor *file, grpc::string GetServices(const grpc::protobuf::FileDescriptor *file,
bool generate_client, bool generate_server); bool generate_client, bool generate_server,
bool internal_access);
} // namespace grpc_csharp_generator } // namespace grpc_csharp_generator
......
...@@ -53,11 +53,14 @@ class CSharpGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator { ...@@ -53,11 +53,14 @@ class CSharpGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
bool generate_client = true; bool generate_client = true;
bool generate_server = true; bool generate_server = true;
bool internal_access = false;
for (size_t i = 0; i < options.size(); i++) { for (size_t i = 0; i < options.size(); i++) {
if (options[i].first == "no_client") { if (options[i].first == "no_client") {
generate_client = false; generate_client = false;
} else if (options[i].first == "no_server") { } else if (options[i].first == "no_server") {
generate_server = false; generate_server = false;
} else if (options[i].first == "internal_access") {
internal_access = true;
} else { } else {
*error = "Unknown generator option: " + options[i].first; *error = "Unknown generator option: " + options[i].first;
return false; return false;
...@@ -66,7 +69,8 @@ class CSharpGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator { ...@@ -66,7 +69,8 @@ class CSharpGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
grpc::string code = grpc_csharp_generator::GetServices(file, grpc::string code = grpc_csharp_generator::GetServices(file,
generate_client, generate_client,
generate_server); generate_server,
internal_access);
if (code.size() == 0) { if (code.size() == 0) {
return true; // don't generate a file if there are no services return true; // don't generate a file if there are no services
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment