mirror of
https://github.com/grpc/grpc-node.git
synced 2025-12-08 18:23:54 +00:00
Merge pull request #914 from murgatroid99/tools_package_definition
grpc-tools: Add option to generate package definition
This commit is contained in:
commit
b4e24beba5
@ -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());
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user