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