|
|
|
@ -760,6 +760,32 @@ PythonGrpcGenerator::PythonGrpcGenerator(const GeneratorConfiguration& config) |
|
|
|
|
|
|
|
|
|
PythonGrpcGenerator::~PythonGrpcGenerator() {} |
|
|
|
|
|
|
|
|
|
static bool GenerateGrpc(GeneratorContext* context, PrivateGenerator& generator, |
|
|
|
|
grpc::string file_name, bool generate_in_pb2_grpc) { |
|
|
|
|
bool success; |
|
|
|
|
std::unique_ptr<ZeroCopyOutputStream> output; |
|
|
|
|
std::unique_ptr<CodedOutputStream> coded_output; |
|
|
|
|
grpc::string grpc_code; |
|
|
|
|
|
|
|
|
|
if (generate_in_pb2_grpc) { |
|
|
|
|
output.reset(context->Open(file_name)); |
|
|
|
|
generator.generate_in_pb2_grpc = true; |
|
|
|
|
} else { |
|
|
|
|
output.reset(context->OpenForInsert(file_name, "module_scope")); |
|
|
|
|
generator.generate_in_pb2_grpc = false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
coded_output.reset(new CodedOutputStream(output.get())); |
|
|
|
|
tie(success, grpc_code) = generator.GetGrpcServices(); |
|
|
|
|
|
|
|
|
|
if (success) { |
|
|
|
|
coded_output->WriteRaw(grpc_code.data(), grpc_code.size()); |
|
|
|
|
return true; |
|
|
|
|
} else { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool PythonGrpcGenerator::Generate(const FileDescriptor* file, |
|
|
|
|
const grpc::string& parameter, |
|
|
|
|
GeneratorContext* context, |
|
|
|
@ -780,28 +806,15 @@ bool PythonGrpcGenerator::Generate(const FileDescriptor* file, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
PrivateGenerator generator(config_, file); |
|
|
|
|
|
|
|
|
|
std::unique_ptr<ZeroCopyOutputStream> pb2_output( |
|
|
|
|
context->OpenForAppend(pb2_file_name)); |
|
|
|
|
std::unique_ptr<ZeroCopyOutputStream> grpc_output( |
|
|
|
|
context->Open(pb2_grpc_file_name)); |
|
|
|
|
CodedOutputStream pb2_coded_out(pb2_output.get()); |
|
|
|
|
CodedOutputStream grpc_coded_out(grpc_output.get()); |
|
|
|
|
bool success = false; |
|
|
|
|
grpc::string pb2_code; |
|
|
|
|
grpc::string grpc_code; |
|
|
|
|
generator.generate_in_pb2_grpc = false; |
|
|
|
|
tie(success, pb2_code) = generator.GetGrpcServices(); |
|
|
|
|
if (success) { |
|
|
|
|
generator.generate_in_pb2_grpc = true; |
|
|
|
|
tie(success, grpc_code) = generator.GetGrpcServices(); |
|
|
|
|
if (success) { |
|
|
|
|
pb2_coded_out.WriteRaw(pb2_code.data(), pb2_code.size()); |
|
|
|
|
grpc_coded_out.WriteRaw(grpc_code.data(), grpc_code.size()); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
if (parameter == "grpc_2_0") { |
|
|
|
|
return GenerateGrpc(context, generator, pb2_grpc_file_name, true); |
|
|
|
|
} else if (parameter == "") { |
|
|
|
|
return GenerateGrpc(context, generator, pb2_grpc_file_name, true) && |
|
|
|
|
GenerateGrpc(context, generator, pb2_file_name, false); |
|
|
|
|
} else { |
|
|
|
|
*error = "Invalid parameter '" + parameter + "'."; |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} // namespace grpc_python_generator
|
|
|
|
|