1 // Copyright 2016 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 {%- set header_guard = "%s_SHARED_H_"|format( 6 module.path|upper|replace("/","_")|replace(".","_")| 7 replace("-", "_")) %} 8 9 {%- macro mojom_type_traits(kind) %} 10 template <> 11 struct MojomTypeTraits<{{kind|get_qualified_name_for_kind}}DataView> { 12 using Data = {{kind|get_qualified_name_for_kind(internal=True)}}; 13 {%- if kind|is_union_kind %} 14 using DataAsArrayElement = Data; 15 static constexpr MojomTypeCategory category = MojomTypeCategory::UNION; 16 {%- else %} 17 using DataAsArrayElement = Pointer<Data>; 18 static constexpr MojomTypeCategory category = MojomTypeCategory::STRUCT; 19 {%- endif %} 20 }; 21 {%- endmacro %} 22 23 {%- macro namespace_begin() %} 24 {%- for namespace in namespaces_as_array %} 25 namespace {{namespace}} { 26 {%- endfor %} 27 {%- endmacro %} 28 29 {%- macro namespace_end() %} 30 {%- for namespace in namespaces_as_array|reverse %} 31 } // namespace {{namespace}} 32 {%- endfor %} 33 {%- endmacro %} 34 35 #ifndef {{header_guard}} 36 #define {{header_guard}} 37 38 #include <stdint.h> 39 40 #include <functional> 41 #include <ostream> 42 #include <type_traits> 43 #include <utility> 44 45 #include "base/compiler_specific.h" 46 #include "base/containers/flat_map.h" 47 #include "mojo/public/cpp/bindings/array_data_view.h" 48 #include "mojo/public/cpp/bindings/enum_traits.h" 49 #include "mojo/public/cpp/bindings/interface_data_view.h" 50 #include "mojo/public/cpp/bindings/lib/bindings_internal.h" 51 #include "mojo/public/cpp/bindings/lib/serialization.h" 52 #include "mojo/public/cpp/bindings/map_data_view.h" 53 #include "mojo/public/cpp/bindings/string_data_view.h" 54 #include "{{module.path}}-shared-internal.h" 55 {%- for import in imports %} 56 #include "{{import.path}}-shared.h" 57 {%- endfor %} 58 59 {% if not disallow_interfaces -%} 60 #include "mojo/public/cpp/bindings/lib/interface_serialization.h" 61 {%- endif %} 62 63 {% if not disallow_native_types %} 64 #include "mojo/public/cpp/bindings/native_enum.h" 65 #include "mojo/public/cpp/bindings/lib/native_struct_serialization.h" 66 {%- endif %} 67 68 {%- if export_header %} 69 #include "{{export_header}}" 70 {%- endif %} 71 72 {{namespace_begin()}} 73 74 {#--- Struct Forward Declarations -#} 75 {%- for struct in structs %} 76 {%- if struct|is_native_only_kind %} 77 using {{struct.name}}DataView = mojo::native::NativeStructDataView; 78 {%- else %} 79 class {{struct.name}}DataView; 80 {%- endif %} 81 {% endfor %} 82 83 {#--- Union Forward Declarations -#} 84 {%- for union in unions %} 85 class {{union.name}}DataView; 86 {%- endfor %} 87 88 {{namespace_end()}} 89 90 namespace mojo { 91 namespace internal { 92 93 {%- for struct in structs %} 94 {%- if not struct|is_native_only_kind %} 95 {{mojom_type_traits(struct)}} 96 {%- endif %} 97 {%- endfor %} 98 99 {%- for union in unions %} 100 {{mojom_type_traits(union)}} 101 {%- endfor %} 102 103 } // namespace internal 104 } // namespace mojo 105 106 {{namespace_begin()}} 107 108 {#--- Enums #} 109 {%- from "enum_macros.tmpl" import enum_decl%} 110 {%- for enum in all_enums %} 111 {%- if enum|is_native_only_kind %} 112 using {{enum|get_name_for_kind(flatten_nested_kind=True)}} = mojo::NativeEnum; 113 {%- else %} 114 {{enum_decl(enum)}} 115 {%- endif %} 116 {%- endfor %} 117 118 {#--- Interfaces #} 119 {%- if interfaces %} 120 // Interface base classes. They are used for type safety check. 121 {%- endif %} 122 {%- for interface in interfaces %} 123 class {{interface.name}}InterfaceBase {}; 124 125 using {{interface.name}}PtrDataView = 126 mojo::InterfacePtrDataView<{{interface.name}}InterfaceBase>; 127 using {{interface.name}}RequestDataView = 128 mojo::InterfaceRequestDataView<{{interface.name}}InterfaceBase>; 129 using {{interface.name}}AssociatedPtrInfoDataView = 130 mojo::AssociatedInterfacePtrInfoDataView<{{interface.name}}InterfaceBase>; 131 using {{interface.name}}AssociatedRequestDataView = 132 mojo::AssociatedInterfaceRequestDataView<{{interface.name}}InterfaceBase>; 133 134 {%- endfor %} 135 136 {#--- Structs #} 137 {%- for struct in structs %} 138 {%- if not struct|is_native_only_kind %} 139 {% include "struct_data_view_declaration.tmpl" %} 140 {%- endif %} 141 {%- endfor %} 142 143 {#--- Interface parameter definitions #} 144 {%- for interface in interfaces %} 145 {%- for method in interface.methods %} 146 {%- set struct = method.param_struct %} 147 {% include "struct_data_view_declaration.tmpl" %} 148 {%- if method.response_parameters != None %} 149 {%- set struct = method.response_param_struct %} 150 {% include "struct_data_view_declaration.tmpl" %} 151 {%- endif %} 152 {%- endfor %} 153 {%- endfor %} 154 155 {#--- Unions #} 156 {%- for union in unions %} 157 {% include "union_data_view_declaration.tmpl" %} 158 {%- endfor %} 159 160 {{namespace_end()}} 161 162 namespace std { 163 164 {%- from "enum_macros.tmpl" import enum_hash %} 165 {%- for enum in all_enums %} 166 {%- if not enum|is_native_only_kind %} 167 {{enum_hash(enum)}} 168 {%- endif %} 169 {%- endfor %} 170 171 } // namespace std 172 173 namespace mojo { 174 175 {#--- Enum Serialization Helpers -#} 176 {%- for enum in all_enums %} 177 {%- if not enum|is_native_only_kind %} 178 {% include "enum_serialization_declaration.tmpl" %} 179 {%- endif %} 180 {%- endfor %} 181 182 {#--- Struct Serialization Helpers -#} 183 {% for struct in structs %} 184 {%- if not struct|is_native_only_kind %} 185 {% include "struct_serialization_declaration.tmpl" %} 186 {%- endif %} 187 {%- endfor %} 188 189 {#--- Union Serialization Helpers -#} 190 {% if unions %} 191 {%- for union in unions %} 192 {% include "union_serialization_declaration.tmpl" %} 193 {%- endfor %} 194 {%- endif %} 195 196 } // namespace mojo 197 198 {{namespace_begin()}} 199 200 {%- for struct in structs %} 201 {%- if not struct|is_native_only_kind %} 202 {% include "struct_data_view_definition.tmpl" %} 203 {%- endif %} 204 {%- endfor %} 205 206 {%- for interface in interfaces %} 207 {%- for method in interface.methods %} 208 {%- set struct = method.param_struct %} 209 {% include "struct_data_view_definition.tmpl" %} 210 {%- if method.response_parameters != None %} 211 {%- set struct = method.response_param_struct %} 212 {% include "struct_data_view_definition.tmpl" %} 213 {%- endif %} 214 {%- endfor %} 215 {%- endfor %} 216 217 {%- for union in unions %} 218 {% include "union_data_view_definition.tmpl" %} 219 {%- endfor %} 220 221 {{namespace_end()}} 222 223 #endif // {{header_guard}} 224 225