Merge pull request #914 from murgatroid99/tools_package_definition

grpc-tools: Add option to generate package definition
This commit is contained in:
Michael Lumish 2019-06-13 13:48:41 -07:00 committed by GitHub
commit b4e24beba5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 46 additions and 15 deletions

View File

@ -178,11 +178,17 @@ void PrintMethod(const MethodDescriptor* method, Printer* out) {
}
// Prints out the service descriptor object
void PrintService(const ServiceDescriptor* service, Printer* out) {
void PrintService(const ServiceDescriptor* service, Printer* out,
const Parameters& params) {
map<grpc::string, grpc::string> template_vars;
out->Print(GetNodeComments(service, true).c_str());
template_vars["name"] = service->name();
out->Print(template_vars, "var $name$Service = exports.$name$Service = {\n");
template_vars["full_name"] = service->full_name();
if (params.generate_package_definition) {
out->Print(template_vars, "var $name$Service = exports['$full_name$'] = {\n");
} else {
out->Print(template_vars, "var $name$Service = exports.$name$Service = {\n");
}
out->Indent();
for (int i = 0; i < service->method_count(); i++) {
grpc::string method_name =
@ -195,14 +201,19 @@ void PrintService(const ServiceDescriptor* service, Printer* out) {
}
out->Outdent();
out->Print("};\n\n");
out->Print(template_vars,
"exports.$name$Client = "
"grpc.makeGenericClientConstructor($name$Service);\n");
if (!params.generate_package_definition) {
out->Print(template_vars,
"exports.$name$Client = "
"grpc.makeGenericClientConstructor($name$Service);\n");
}
out->Print(GetNodeComments(service, false).c_str());
}
void PrintImports(const FileDescriptor* file, Printer* out) {
out->Print("var grpc = require('grpc');\n");
void PrintImports(const FileDescriptor* file, Printer* out,
const Parameters& params) {
if (!params.generate_package_definition) {
out->Print("var grpc = require('grpc');\n");
}
if (file->message_type_count() > 0) {
grpc::string file_path =
GetRelativePath(file->name(), GetJSMessageFilename(file->name()));
@ -230,14 +241,16 @@ void PrintTransformers(const FileDescriptor* file, Printer* out) {
out->Print("\n");
}
void PrintServices(const FileDescriptor* file, Printer* out) {
void PrintServices(const FileDescriptor* file, Printer* out,
const Parameters& params) {
for (int i = 0; i < file->service_count(); i++) {
PrintService(file->service(i), out);
PrintService(file->service(i), out, params);
}
}
} // namespace
grpc::string GenerateFile(const FileDescriptor* file) {
grpc::string GenerateFile(const FileDescriptor* file,
const Parameters& params) {
grpc::string output;
{
StringOutputStream output_stream(&output);
@ -257,11 +270,11 @@ grpc::string GenerateFile(const FileDescriptor* file) {
out.Print("'use strict';\n");
PrintImports(file, &out);
PrintImports(file, &out, params);
PrintTransformers(file, &out);
PrintServices(file, &out);
PrintServices(file, &out, params);
out.Print(GetNodeComments(file, false).c_str());
}

View File

@ -23,7 +23,13 @@
namespace grpc_node_generator {
grpc::string GenerateFile(const grpc::protobuf::FileDescriptor* file);
struct Parameters {
// Generate a package definition object instead of Client classes
bool generate_package_definition;
};
grpc::string GenerateFile(const grpc::protobuf::FileDescriptor* file,
const Parameters& params);
} // namespace grpc_node_generator

View File

@ -36,8 +36,20 @@ class NodeGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
const grpc::string& parameter,
grpc::protobuf::compiler::GeneratorContext* context,
grpc::string* error) const {
grpc::string code = GenerateFile(file);
grpc_node_generator::Parameters generator_parameters;
generator_parameters.generate_package_definition = false;
if (!parameter.empty()) {
std::vector<grpc::string> parameters_list =
grpc_generator::tokenize(parameter, ",");
for (auto parameter_string = parameters_list.begin();
parameter_string != parameters_list.end(); parameter_string++) {
printf("%s", parameter_string);
if (*parameter_string == "generate_package_definition") {
generator_parameters.generate_package_definition = true;
}
}
}
grpc::string code = GenerateFile(file, generator_parameters);
if (code.size() == 0) {
return true;
}