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 <functional> 18 #include <limits> 19 #include <string> 20 #include "flatbuffers/flatbuffers.h" 21 #include "flatbuffers/idl.h" 22 #include "flatbuffers/util.h" 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 bool schema_only; 46 GenerateFn generateGRPC; 47 flatbuffers::IDLOptions::Language lang; 48 const char *generator_help; 49 MakeRuleFn make_rule; 50 }; 51 52 typedef void (*WarnFn)(const FlatCompiler *flatc, const std::string &warn, 53 bool show_exe_name); 54 55 typedef void (*ErrorFn)(const FlatCompiler *flatc, const std::string &err, 56 bool usage, bool show_exe_name); 57 58 // Parameters required to initialize the FlatCompiler. 59 struct InitParams { InitParamsInitParams60 InitParams() 61 : generators(nullptr), 62 num_generators(0), 63 warn_fn(nullptr), 64 error_fn(nullptr) {} 65 66 const Generator *generators; 67 size_t num_generators; 68 WarnFn warn_fn; 69 ErrorFn error_fn; 70 }; 71 FlatCompiler(const InitParams & params)72 explicit FlatCompiler(const InitParams ¶ms) : params_(params) {} 73 74 int Compile(int argc, const char **argv); 75 76 std::string GetUsageString(const char *program_name) const; 77 78 private: 79 void ParseFile(flatbuffers::Parser &parser, const std::string &filename, 80 const std::string &contents, 81 std::vector<const char *> &include_directories) const; 82 83 void LoadBinarySchema(Parser &parser, const std::string &filename, 84 const std::string &contents); 85 86 void Warn(const std::string &warn, bool show_exe_name = true) const; 87 88 void Error(const std::string &err, bool usage = true, 89 bool show_exe_name = true) const; 90 91 InitParams params_; 92 }; 93 94 } // namespace flatbuffers 95 96 #endif // FLATC_H_ 97