aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/compiler/cpp_plugin.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/cpp_plugin.cc')
-rw-r--r--src/compiler/cpp_plugin.cc21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/compiler/cpp_plugin.cc b/src/compiler/cpp_plugin.cc
index 4ee05ee037..35f1bf3e93 100644
--- a/src/compiler/cpp_plugin.cc
+++ b/src/compiler/cpp_plugin.cc
@@ -62,6 +62,7 @@ class CppGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
grpc_cpp_generator::Parameters generator_parameters;
generator_parameters.use_system_headers = true;
+ generator_parameters.generate_mock_code = false;
ProtoBufFile pbfile(file);
@@ -85,6 +86,13 @@ class CppGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
}
} else if (param[0] == "grpc_search_path") {
generator_parameters.grpc_search_path = param[1];
+ } else if (param[0] == "generate_mock_code") {
+ if (param[1] == "true") {
+ generator_parameters.generate_mock_code = true;
+ } else if (param[1] != "false") {
+ *error = grpc::string("Invalid parameter: ") + *parameter_string;
+ return false;
+ }
} else {
*error = grpc::string("Unknown parameter: ") + *parameter_string;
return false;
@@ -114,6 +122,19 @@ class CppGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
grpc::protobuf::io::CodedOutputStream source_coded_out(source_output.get());
source_coded_out.WriteRaw(source_code.data(), source_code.size());
+ if (!generator_parameters.generate_mock_code) {
+ return true;
+ }
+ grpc::string mock_code =
+ grpc_cpp_generator::GetMockPrologue(&pbfile, generator_parameters) +
+ grpc_cpp_generator::GetMockIncludes(&pbfile, generator_parameters) +
+ grpc_cpp_generator::GetMockServices(&pbfile, generator_parameters) +
+ grpc_cpp_generator::GetMockEpilogue(&pbfile, generator_parameters);
+ std::unique_ptr<grpc::protobuf::io::ZeroCopyOutputStream> mock_output(
+ context->Open(file_name + "_mock.grpc.pb.h"));
+ grpc::protobuf::io::CodedOutputStream mock_coded_out(mock_output.get());
+ mock_coded_out.WriteRaw(mock_code.data(), mock_code.size());
+
return true;
}