diff --git a/src/compiler/csharp_generator.cc b/src/compiler/csharp_generator.cc index 08cd41dee7d..5744d7c96a9 100644 --- a/src/compiler/csharp_generator.cc +++ b/src/compiler/csharp_generator.cc @@ -566,7 +566,8 @@ void GenerateService(Printer* out, const ServiceDescriptor *service, } // anonymous namespace -grpc::string GetServices(const FileDescriptor *file) { +grpc::string GetServices(const FileDescriptor *file, bool generate_client, + bool generate_server) { grpc::string output; { // Scope the output stream so it closes and finalizes output to the string. @@ -594,7 +595,7 @@ grpc::string GetServices(const FileDescriptor *file) { out.Print("namespace $namespace$ {\n", "namespace", GetFileNamespace(file)); out.Indent(); for (int i = 0; i < file->service_count(); i++) { - GenerateService(&out, file->service(i), true, true); + GenerateService(&out, file->service(i), generate_client, generate_server); } out.Outdent(); out.Print("}\n"); diff --git a/src/compiler/csharp_generator.h b/src/compiler/csharp_generator.h index 90eb7e29846..79c2e57266e 100644 --- a/src/compiler/csharp_generator.h +++ b/src/compiler/csharp_generator.h @@ -40,7 +40,8 @@ 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); } // namespace grpc_csharp_generator diff --git a/src/compiler/csharp_plugin.cc b/src/compiler/csharp_plugin.cc index bc86fbd616d..fd1ec99e2b2 100644 --- a/src/compiler/csharp_plugin.cc +++ b/src/compiler/csharp_plugin.cc @@ -51,7 +51,22 @@ class CSharpGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator { std::vector > options; grpc::protobuf::compiler::ParseGeneratorParameter(parameter, &options); - grpc::string code = grpc_csharp_generator::GetServices(file); + bool generate_client = true; + bool generate_server = true; + for (size_t i = 0; i < options.size(); i++) { + if (options[i].first == "no_client") { + generate_client = false; + } else if (options[i].first == "no_server") { + generate_server = false; + } else { + *error = "Unknown generator option: " + options[i].first; + return false; + } + } + + grpc::string code = grpc_csharp_generator::GetServices(file, + generate_client, + generate_server); if (code.size() == 0) { return true; // don't generate a file if there are no services }