]>
git.proxmox.com Git - ceph.git/blob - ceph/src/jaegertracing/thrift/compiler/cpp/src/thrift/generate/t_netstd_generator.h
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
19 * Contains some contributions under the Thrift Software License.
20 * Please see doc/old-thrift-license.txt in the Thrift distribution for
36 #include "thrift/platform.h"
37 #include "thrift/generate/t_oop_generator.h"
41 using std::ostringstream
;
43 using std::stringstream
;
46 static const string endl
= "\n"; // avoid ostream << std::endl flushes
48 class t_netstd_generator
: public t_oop_generator
51 struct member_mapping_scope
54 member_mapping_scope() : scope_member(0) { }
56 map
<string
, string
> mapping_table
;
60 t_netstd_generator(t_program
* program
, const map
<string
, string
>& parsed_options
, const string
& option_string
);
62 bool is_wcf_enabled() const;
63 bool is_nullable_enabled() const;
64 bool is_hashcode_enabled() const;
65 bool is_serialize_enabled() const;
66 bool is_union_enabled() const;
67 map
<string
, int> get_keywords_list() const;
70 void init_generator();
71 void close_generator();
72 void generate_consts(vector
<t_const
*> consts
);
73 void generate_consts(ostream
& out
, vector
<t_const
*> consts
);
74 void generate_typedef(t_typedef
* ttypedef
);
75 void generate_enum(t_enum
* tenum
);
76 void generate_enum(ostream
& out
, t_enum
* tenum
);
77 void generate_struct(t_struct
* tstruct
);
78 void generate_xception(t_struct
* txception
);
79 void generate_service(t_service
* tservice
);
81 void generate_property(ostream
& out
, t_field
* tfield
, bool isPublic
, bool generateIsset
);
82 void generate_netstd_property(ostream
& out
, t_field
* tfield
, bool isPublic
, bool includeIsset
= true, string fieldPrefix
= "");
83 bool print_const_value(ostream
& out
, string name
, t_type
* type
, t_const_value
* value
, bool in_static
, bool defval
= false, bool needtype
= false);
84 string
render_const_value(ostream
& out
, string name
, t_type
* type
, t_const_value
* value
);
85 void print_const_constructor(ostream
& out
, vector
<t_const
*> consts
);
86 void print_const_def_value(ostream
& out
, string name
, t_type
* type
, t_const_value
* value
);
87 void generate_netstd_struct(t_struct
* tstruct
, bool is_exception
);
88 void generate_netstd_union(t_struct
* tunion
);
89 void generate_netstd_struct_definition(ostream
& out
, t_struct
* tstruct
, bool is_xception
= false, bool in_class
= false, bool is_result
= false);
90 void generate_netstd_union_definition(ostream
& out
, t_struct
* tunion
);
91 void generate_netstd_union_class(ostream
& out
, t_struct
* tunion
, t_field
* tfield
);
92 void generate_netstd_wcffault(ostream
& out
, t_struct
* tstruct
);
93 void generate_netstd_struct_reader(ostream
& out
, t_struct
* tstruct
);
94 void generate_netstd_struct_result_writer(ostream
& out
, t_struct
* tstruct
);
95 void generate_netstd_struct_writer(ostream
& out
, t_struct
* tstruct
);
96 void generate_netstd_struct_tostring(ostream
& out
, t_struct
* tstruct
);
97 void generate_netstd_struct_equals(ostream
& out
, t_struct
* tstruct
);
98 void generate_netstd_struct_hashcode(ostream
& out
, t_struct
* tstruct
);
99 void generate_netstd_union_reader(ostream
& out
, t_struct
* tunion
);
100 void generate_function_helpers(ostream
& out
, t_function
* tfunction
);
101 void generate_service_interface(ostream
& out
, t_service
* tservice
);
102 void generate_service_helpers(ostream
& out
, t_service
* tservice
);
103 void generate_service_client(ostream
& out
, t_service
* tservice
);
104 void generate_service_server(ostream
& out
, t_service
* tservice
);
105 void generate_process_function_async(ostream
& out
, t_service
* tservice
, t_function
* function
);
106 void generate_deserialize_field(ostream
& out
, t_field
* tfield
, string prefix
= "", bool is_propertyless
= false);
107 void generate_deserialize_struct(ostream
& out
, t_struct
* tstruct
, string prefix
= "");
108 void generate_deserialize_container(ostream
& out
, t_type
* ttype
, string prefix
= "");
109 void generate_deserialize_set_element(ostream
& out
, t_set
* tset
, string prefix
= "");
110 void generate_deserialize_map_element(ostream
& out
, t_map
* tmap
, string prefix
= "");
111 void generate_deserialize_list_element(ostream
& out
, t_list
* list
, string prefix
= "");
112 void generate_serialize_field(ostream
& out
, t_field
* tfield
, string prefix
= "", bool is_propertyless
= false);
113 void generate_serialize_struct(ostream
& out
, t_struct
* tstruct
, string prefix
= "");
114 void generate_serialize_container(ostream
& out
, t_type
* ttype
, string prefix
= "");
115 void generate_serialize_map_element(ostream
& out
, t_map
* tmap
, string iter
, string map
);
116 void generate_serialize_set_element(ostream
& out
, t_set
* tmap
, string iter
);
117 void generate_serialize_list_element(ostream
& out
, t_list
* tlist
, string iter
);
118 void generate_netstd_doc(ostream
& out
, t_field
* field
);
119 void generate_netstd_doc(ostream
& out
, t_doc
* tdoc
);
120 void generate_netstd_doc(ostream
& out
, t_function
* tdoc
);
121 void generate_netstd_docstring_comment(ostream
& out
, string contents
);
122 void docstring_comment(ostream
& out
, const string
& comment_start
, const string
& line_prefix
, const string
& contents
, const string
& comment_end
);
123 void start_netstd_namespace(ostream
& out
);
124 void end_netstd_namespace(ostream
& out
);
126 string
netstd_type_usings() const;
127 string
netstd_thrift_usings() const;
129 string
type_name(t_type
* ttype
);
130 string
base_type_name(t_base_type
* tbase
);
131 string
declare_field(t_field
* tfield
, bool init
= false, string prefix
= "");
132 string
function_signature_async(t_function
* tfunction
, string prefix
= "");
133 string
function_signature(t_function
* tfunction
, string prefix
= "");
134 string
argument_list(t_struct
* tstruct
);
135 string
type_to_enum(t_type
* ttype
);
136 string
prop_name(t_field
* tfield
, bool suppress_mapping
= false);
137 string
get_enum_class_name(t_type
* type
);
140 string namespace_name_
;
141 string namespace_dir_
;
149 string wcf_namespace_
;
150 map
<string
, int> netstd_keywords
;
151 vector
<member_mapping_scope
> member_mapping_scopes
;
153 void init_keywords();
154 string
normalize_name(string name
);
155 string
make_valid_csharp_identifier(string
const& fromName
);
156 void prepare_member_name_mapping(t_struct
* tstruct
);
157 void prepare_member_name_mapping(void* scope
, const vector
<t_field
*>& members
, const string
& structname
);
158 void cleanup_member_name_mapping(void* scope
);
159 string
get_mapped_member_name(string oldname
);