blob: f2765d239ae2c23ec11a260497be2c5afaebfde3 [file] [log] [blame]
Austin Schuhe89fa2d2019-08-14 20:24:23 -07001/*
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
27namespace flatbuffers {
28
29class 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 {
60 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
72 explicit FlatCompiler(const InitParams &params) : 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_