Refactor languages to use CodeGenerator interface. (#7797)

* Refactor to use CodeGenerator interface.

- Move code to its own header file to be included in flatc_main.cpp
- Refactor code to use CodeGenerator interface for all languages

* Format all files

* remove lua code generator since it doesn't support bfbs generator

* Update CMakeLists file with new idl_gen_*.cpp and idl_gen_*.h files

* Add idl_gen_swift header file

* Add idl_gen_swift header file and update bazel file

* Remove CodeGenerator interface for idl_gen_text.*. Remove comments and extern declaration

* Reorder header and implementation files in CMakeLists.txt

* Add idl_gen_* header files to implementation files

* Update CMakeLists and remove unused import

Co-authored-by: Derek Bailey <derekbailey@google.com>
This commit is contained in:
Khanh Nguyen
2023-01-25 09:05:48 -08:00
committed by GitHub
parent 802a3a056a
commit 34c821f4ad
35 changed files with 1269 additions and 7 deletions

View File

@@ -16,6 +16,8 @@
// independent from idl_parser, since this code is not needed for most clients
#include "idl_gen_python.h"
#include <cctype>
#include <set>
#include <string>
@@ -1912,4 +1914,50 @@ bool GeneratePython(const Parser &parser, const std::string &path,
return generator.generate();
}
namespace {
class PythonCodeGenerator : public CodeGenerator {
public:
Status GenerateCode(const Parser &parser, const std::string &path,
const std::string &filename) override {
if (!GeneratePython(parser, path, filename)) { return Status::ERROR; }
return Status::OK;
}
Status GenerateCode(const uint8_t *buffer, int64_t length) override {
(void)buffer;
(void)length;
return Status::NOT_IMPLEMENTED;
}
Status GenerateMakeRule(const Parser &parser, const std::string &path,
const std::string &filename,
std::string &output) override {
(void)parser;
(void)path;
(void)filename;
(void)output;
return Status::NOT_IMPLEMENTED;
}
Status GenerateGrpcCode(const Parser &parser, const std::string &path,
const std::string &filename) override {
if (!GeneratePythonGRPC(parser, path, filename)) { return Status::ERROR; }
return Status::OK;
}
bool IsSchemaOnly() const override { return true; }
bool SupportsBfbsGeneration() const override { return false; }
IDLOptions::Language Language() const override { return IDLOptions::kPython; }
std::string LanguageName() const override { return "Python"; }
};
} // namespace
std::unique_ptr<CodeGenerator> NewPythonCodeGenerator() {
return std::unique_ptr<PythonCodeGenerator>(new PythonCodeGenerator());
}
} // namespace flatbuffers