1 /* 2 * Copyright 2017 Google Inc. All rights reserved. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include "flatbuffers/flatbuffers.h" 18 #include "flatbuffers/idl.h" 19 #include "flatbuffers/util.h" 20 #include <functional> 21 #include <limits> 22 #include <string> 23 24 #ifndef FLATC_H_ 25 #define FLATC_H_ 26 27 namespace flatbuffers { 28 29 class FlatCompiler { 30 public: 31 // Output generator for the various programming languages and formats we 32 // support. 33 struct Generator { 34 typedef bool (*GenerateFn)(const flatbuffers::Parser &parser, 35 const std::string &path, 36 const std::string &file_name); 37 typedef std::string (*MakeRuleFn)(const flatbuffers::Parser &parser, 38 const std::string &path, 39 const std::string &file_name); 40 41 GenerateFn generate; 42 const char *generator_opt_short; 43 const char *generator_opt_long; 44 const char *lang_name; 45 GenerateFn generateGRPC; 46 flatbuffers::IDLOptions::Language lang; 47 const char *generator_help; 48 MakeRuleFn make_rule; 49 }; 50 51 typedef void (*WarnFn)(const FlatCompiler *flatc, 52 const std::string &warn, 53 bool show_exe_name); 54 55 typedef void (*ErrorFn)(const FlatCompiler *flatc, 56 const std::string &err, 57 bool usage, bool show_exe_name); 58 59 // Parameters required to initialize the FlatCompiler. 60 struct InitParams { InitParamsInitParams61 InitParams() 62 : generators(nullptr), 63 num_generators(0), 64 warn_fn(nullptr), 65 error_fn(nullptr) {} 66 67 const Generator* generators; 68 size_t num_generators; 69 WarnFn warn_fn; 70 ErrorFn error_fn; 71 }; 72 FlatCompiler(const InitParams & params)73 explicit FlatCompiler(const InitParams& params) : params_(params) {} 74 75 int Compile(int argc, const char** argv); 76 77 std::string GetUsageString(const char* program_name) const; 78 79 private: 80 void ParseFile(flatbuffers::Parser &parser, 81 const std::string &filename, 82 const std::string &contents, 83 std::vector<const char *> &include_directories) const; 84 85 void Warn(const std::string &warn, bool show_exe_name = true) const; 86 87 void Error(const std::string &err, bool usage = true, 88 bool show_exe_name = true) const; 89 90 InitParams params_; 91 }; 92 93 94 } // namespace flatbuffers 95 96 #endif // FLATC_H_ 97