/src/flatbuffers/grpc/src/compiler/schema_interface.h
Line | Count | Source |
1 | | /* |
2 | | * |
3 | | * Copyright 2015 gRPC authors. |
4 | | * |
5 | | * Licensed under the Apache License, Version 2.0 (the "License"); |
6 | | * you may not use this file except in compliance with the License. |
7 | | * You may obtain a copy of the License at |
8 | | * |
9 | | * http://www.apache.org/licenses/LICENSE-2.0 |
10 | | * |
11 | | * Unless required by applicable law or agreed to in writing, software |
12 | | * distributed under the License is distributed on an "AS IS" BASIS, |
13 | | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
14 | | * See the License for the specific language governing permissions and |
15 | | * limitations under the License. |
16 | | * |
17 | | */ |
18 | | |
19 | | #ifndef GRPC_INTERNAL_COMPILER_SCHEMA_INTERFACE_H |
20 | | #define GRPC_INTERNAL_COMPILER_SCHEMA_INTERFACE_H |
21 | | |
22 | | #include <map> |
23 | | #include <memory> |
24 | | #include <vector> |
25 | | |
26 | | #ifndef GRPC_CUSTOM_STRING |
27 | | #include <string> |
28 | | #define GRPC_CUSTOM_STRING std::string |
29 | | #endif |
30 | | |
31 | | namespace grpc { |
32 | | |
33 | | typedef GRPC_CUSTOM_STRING string; |
34 | | |
35 | | } // namespace grpc |
36 | | |
37 | | namespace grpc_generator { |
38 | | |
39 | | // A common interface for objects having comments in the source. |
40 | | // Return formatted comments to be inserted in generated code. |
41 | | struct CommentHolder { |
42 | 0 | virtual ~CommentHolder() {} |
43 | | virtual grpc::string GetLeadingComments(const grpc::string prefix) const = 0; |
44 | | virtual grpc::string GetTrailingComments(const grpc::string prefix) const = 0; |
45 | | virtual std::vector<grpc::string> GetAllComments() const = 0; |
46 | | }; |
47 | | |
48 | | // An abstract interface representing a method. |
49 | | struct Method : public CommentHolder { |
50 | 0 | virtual ~Method() {} |
51 | | |
52 | | virtual grpc::string name() const = 0; |
53 | | |
54 | | virtual grpc::string input_type_name() const = 0; |
55 | | virtual grpc::string output_type_name() const = 0; |
56 | | |
57 | | virtual bool get_module_and_message_path_input( |
58 | | grpc::string* str, grpc::string generator_file_name, |
59 | | bool generate_in_pb2_grpc, grpc::string import_prefix) const = 0; |
60 | | virtual bool get_module_and_message_path_output( |
61 | | grpc::string* str, grpc::string generator_file_name, |
62 | | bool generate_in_pb2_grpc, grpc::string import_prefix) const = 0; |
63 | | |
64 | | virtual std::vector<grpc::string> get_input_namespace_parts() const = 0; |
65 | | virtual grpc::string get_input_type_name() const = 0; |
66 | | virtual std::vector<grpc::string> get_output_namespace_parts() const = 0; |
67 | | virtual grpc::string get_output_type_name() const = 0; |
68 | | |
69 | | virtual grpc::string get_fb_builder() const = 0; |
70 | | |
71 | | virtual bool NoStreaming() const = 0; |
72 | | virtual bool ClientStreaming() const = 0; |
73 | | virtual bool ServerStreaming() const = 0; |
74 | | virtual bool BidiStreaming() const = 0; |
75 | | }; |
76 | | |
77 | | // An abstract interface representing a service. |
78 | | struct Service : public CommentHolder { |
79 | 0 | virtual ~Service() {} |
80 | | |
81 | | virtual std::vector<grpc::string> namespace_parts() const = 0; |
82 | | virtual grpc::string name() const = 0; |
83 | | virtual bool is_internal() const = 0; |
84 | | |
85 | | virtual int method_count() const = 0; |
86 | | virtual std::unique_ptr<const Method> method(int i) const = 0; |
87 | | }; |
88 | | |
89 | | struct Printer { |
90 | 0 | virtual ~Printer() {} |
91 | | |
92 | | virtual void Print(const std::map<grpc::string, grpc::string>& vars, |
93 | | const char* template_string) = 0; |
94 | | virtual void Print(const char* string) = 0; |
95 | | virtual void SetIndentationSize(const size_t size) = 0; |
96 | | virtual void Indent() = 0; |
97 | | virtual void Outdent() = 0; |
98 | | }; |
99 | | |
100 | | // An interface that allows the source generated to be output using various |
101 | | // libraries/idls/serializers. |
102 | | struct File : public CommentHolder { |
103 | 0 | virtual ~File() {} |
104 | | |
105 | | virtual grpc::string filename() const = 0; |
106 | | virtual grpc::string filename_without_ext() const = 0; |
107 | | virtual grpc::string package() const = 0; |
108 | | virtual std::vector<grpc::string> package_parts() const = 0; |
109 | | virtual grpc::string additional_headers() const = 0; |
110 | | |
111 | | virtual int service_count() const = 0; |
112 | | virtual std::unique_ptr<const Service> service(int i) const = 0; |
113 | | |
114 | | virtual std::unique_ptr<Printer> CreatePrinter( |
115 | | grpc::string* str, const char indentation_type = ' ') const = 0; |
116 | | }; |
117 | | } // namespace grpc_generator |
118 | | |
119 | | #endif // GRPC_INTERNAL_COMPILER_SCHEMA_INTERFACE_H |