[TS] GRPC Implementation (#6141)

* GRPC implementation for Typescript

* Fixes a couple of issues

* Finished implementing the typescript support for grpc

* Updated generated code

* Fixes CI
This commit is contained in:
mustiikhalil
2020-10-07 19:56:30 +03:00
committed by GitHub
parent 3359e3042f
commit 7b9e61fccf
31 changed files with 1414 additions and 159 deletions

View File

@@ -26,6 +26,7 @@
#include "src/compiler/python_generator.h"
#include "src/compiler/python_private_generator.h"
#include "src/compiler/swift_generator.h"
#include "src/compiler/ts_generator.h"
#if defined(_MSC_VER)
# pragma warning(push)
@@ -206,7 +207,8 @@ class FlatBufFile : public grpc_generator::File {
kLanguageCpp,
kLanguageJava,
kLanguagePython,
kLanguageSwift
kLanguageSwift,
kLanguageTS
};
FlatBufFile(const Parser &parser, const std::string &file_name,
@@ -258,6 +260,9 @@ class FlatBufFile : public grpc_generator::File {
case kLanguageSwift: {
return "";
}
case kLanguageTS: {
return "";
}
}
return "";
}
@@ -467,6 +472,54 @@ bool GenerateSwiftGRPC(const Parser &parser, const std::string &path,
return SwiftGRPCGenerator(parser, path, file_name).generate();
}
class TSGRPCGenerator : public flatbuffers::BaseGenerator {
private:
CodeWriter code_;
public:
TSGRPCGenerator(const Parser &parser, const std::string &path,
const std::string &filename)
: BaseGenerator(parser, path, filename, "", "" /*Unused*/, "ts") {}
bool generate() {
code_.Clear();
FlatBufFile file(parser_, file_name_, FlatBufFile::kLanguageTS);
for (int i = 0; i < file.service_count(); i++) {
auto service = file.service(i);
code_ += grpc_ts_generator::Generate(&file, service.get(), file_name_);
const auto ts_name = GeneratedFileName(path_, file_name_);
if (!SaveFile(ts_name.c_str(), code_.ToString(), false)) return false;
code_.Clear();
code_ += grpc_ts_generator::GenerateInterface(&file, service.get(),
file_name_);
const auto ts_interface_name = GeneratedFileName(path_, file_name_, true);
if (!SaveFile(ts_interface_name.c_str(), code_.ToString(), false))
return false;
}
return true;
}
static std::string GeneratedFileName(const std::string &path,
const std::string &file_name,
const bool is_interface = false) {
if (is_interface) return path + file_name + "_grpc.d.ts";
return path + file_name + "_grpc.js";
}
};
bool GenerateTSGRPC(const Parser &parser, const std::string &path,
const std::string &file_name) {
int nservices = 0;
for (auto it = parser.services_.vec.begin(); it != parser.services_.vec.end();
++it) {
if (!(*it)->generated) nservices++;
}
if (!nservices) return true;
return TSGRPCGenerator(parser, path, file_name).generate();
}
} // namespace flatbuffers
#if defined(_MSC_VER)