mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-12 07:50:59 +00:00
[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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user