OLD | NEW |
(Empty) | |
| 1 // Copyright 2015 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 {%- macro writeMojomType(typepkg, type, pkg, exported=true, topLevel=true) -%} |
| 6 {%- if type|identifier|identifier_check('WriteMojomType') -%} {#- Already printe
d out -#} |
| 7 {{writeTypeTypeReference(typepkg, type, pkg)}} |
| 8 {%- else -%} |
| 9 |
| 10 {%- if type|mojom_type(typepkg) != "" -%}{#- simple kind case -#} |
| 11 &{{type|mojom_type(typepkg)}} |
| 12 {%- elif type|is_array -%} |
| 13 &{{writeTypeArrayType(typepkg, type, pkg, exported)}} |
| 14 {%- elif type|is_map -%} |
| 15 &{{writeTypeMapType(typepkg, type, pkg, exported)}} |
| 16 {%- elif type|is_enum or type|is_struct or type|is_union -%} |
| 17 {%- if topLevel -%} |
| 18 {{- type|identifier|identifier_store('WriteMojomType') -}} |
| 19 {%- if type|is_enum -%} |
| 20 {{writeMojomEnumType(typepkg, type, pkg, exported)}} |
| 21 {%- elif type|is_struct -%} |
| 22 {{writeMojomStructType(typepkg, type, pkg, exported)}} |
| 23 {%- else -%} {#- Must be a union -#} |
| 24 {{writeMojomUnionType(typepkg, type, pkg, exported)}} |
| 25 {%- endif -%} |
| 26 {%- else -%} |
| 27 {{writeTypeTypeReference(typepkg, type, pkg)}} |
| 28 {%- endif -%} |
| 29 {%- elif type|is_interface or type|is_interface_request -%} |
| 30 {{- type|identifier|identifier_store('WriteMojomType') -}} |
| 31 {{writeTypeTypeReference(typepkg, type, pkg)}} |
| 32 {%- else -%} |
| 33 ERROR: UNSUPPORTED TYPE |
| 34 {%- endif -%} |
| 35 {%- endif -%} |
| 36 {%- endmacro -%} |
| 37 |
| 38 {%- macro writeTypeTypeReference(typepkg, type, pkg) -%} |
| 39 &{{typepkg}}TypeTypeReference{ |
| 40 Value: {{writeTypeReference(typepkg, type, pkg)}}, |
| 41 } |
| 42 {%- endmacro -%} |
| 43 |
| 44 {%- macro writeTypeReference(typepkg, type, pkg) -%} |
| 45 {{typepkg}}TypeReference { |
| 46 {%- if type|is_nullable -%} |
| 47 Nullable: true, |
| 48 {%- endif -%} |
| 49 {%- if type|is_interface_request -%}{# Interface request collapses to interfac
e. #} |
| 50 IsInterfaceRequest: true, |
| 51 Identifier: &{{writePackagedTypeID(typepkg, type.kind, pkg)}}, |
| 52 TypeKey: &{{writePackagedTypeID(typepkg, type.kind, pkg)}}, |
| 53 {%- else -%} |
| 54 Identifier: &{{writePackagedTypeID(typepkg, type, pkg)}}, |
| 55 TypeKey: &{{writePackagedTypeID(typepkg, type, pkg)}}, |
| 56 {%- endif -%} |
| 57 } |
| 58 {%- endmacro -%} |
| 59 |
| 60 {%- macro writePackagedTypeID(typepkg, type, pkg) -%} |
| 61 {%- if type|package != '' -%}{{type|package}}.{%- endif -%}ID_{{type|mojom_type_
identifier}} |
| 62 {%- endmacro -%} |
| 63 |
| 64 |
| 65 {%- macro writeMojomTypeDef(typepkg, type, pkg, exported=True) -%} |
| 66 {%- if should_gen_mojom_types -%} |
| 67 {%- if type|is_enum -%} |
| 68 // String names and labels used by the MojomEnum types. |
| 69 var ( |
| 70 enumName_{{type|name}} = "{{type|name}}" |
| 71 {% for field in type.fields %} |
| 72 enumFieldName_{{type|name}}_{{field|name}} = "{{field|name}}" |
| 73 {% endfor %} |
| 74 ) |
| 75 |
| 76 func {{type|mojom_type_identifier}}() {{typepkg}}MojomEnum { |
| 77 return {{ writeMojomType(typepkg, type, pkg, exported) }} |
| 78 } |
| 79 {%- elif type|is_struct -%} |
| 80 // String names and labels used by the MojomStruct types. |
| 81 var ( |
| 82 structName_{{type|name}} = "{{type|name}}" |
| 83 {% for field in type.fields %} |
| 84 structFieldName_{{type|name}}_{{field|name}} = "{{field|name}}" |
| 85 {% endfor %} |
| 86 ) |
| 87 |
| 88 func {{type|mojom_type_identifier}}() {{typepkg}}MojomStruct { |
| 89 return {{ writeMojomType(typepkg, type, pkg, exported) }} |
| 90 } |
| 91 {%- elif type|is_union -%} |
| 92 // String names and labels used by the MojomUnion types. |
| 93 var ( |
| 94 unionName_{{type|name}} = "{{type|name}}" |
| 95 {% for field in type.fields %} |
| 96 unionFieldName_{{type|name}}_{{field|name}} = "{{field|name}}" |
| 97 {% endfor %} |
| 98 ) |
| 99 |
| 100 func {{type|mojom_type_identifier}}() {{typepkg}}MojomUnion { |
| 101 return {{ writeMojomType(typepkg, type, pkg, exported) }} |
| 102 } |
| 103 {%- elif type|is_interface -%} |
| 104 var ( |
| 105 interfaceName_{{type|name}} = "{{type|name}}" |
| 106 {% for method in type.methods %} |
| 107 interfaceMethodName_{{type|name}}_{{method|name}} = "{{method|name}}" |
| 108 {% endfor %} |
| 109 ) |
| 110 |
| 111 func {{type|mojom_type_identifier}}() {{typepkg}}MojomInterface { |
| 112 responseParamsMap := make(map[string]*{{typepkg}}MojomStruct) |
| 113 _ = responseParamsMap // To avoid the declared but unused compiler error |
| 114 {% for method in type.methods %} |
| 115 {% if method|has_response %} |
| 116 mstruct_{{method|name}} := {{method.response_param_struct|mojom_type_identifie
r}}() |
| 117 responseParamsMap[interfaceMethodName_{{type|name}}_{{method|name}}] = &mstruc
t_{{method|name}} |
| 118 {% endif %} |
| 119 {% endfor %} |
| 120 return {{typepkg}}MojomInterface{ |
| 121 DeclData: &{{typepkg}}DeclarationData{ |
| 122 ShortName: &interfaceName_{{type|name}}, |
| 123 }, |
| 124 Methods: map[uint32]{{typepkg}}MojomMethod{ |
| 125 {%- for method in type.methods -%} |
| 126 {{type|name(False)}}_{{method|name}}_Name: {{typepkg}}MojomMethod{ |
| 127 DeclData: &{{typepkg}}DeclarationData{ |
| 128 ShortName: &interfaceMethodName_{{type|name}}_{{method|name}}, |
| 129 }, |
| 130 Parameters: {{method.param_struct|mojom_type_identifier}}(), |
| 131 ResponseParams: responseParamsMap[interfaceMethodName_{{type|name}}_{{me
thod|name}}], |
| 132 }, |
| 133 {%- endfor -%} |
| 134 }, |
| 135 } |
| 136 } |
| 137 {%- else -%} |
| 138 BAD TYPE NAME GIVEN |
| 139 {%- endif -%} |
| 140 {%- endif -%} |
| 141 {%- endmacro -%} |
| 142 |
| 143 {%- macro writeTypeArrayType(typepkg, type, pkg, exported) -%} |
| 144 {{typepkg}}TypeArrayType{ |
| 145 Value: {{typepkg}}ArrayType{ |
| 146 {%- if type|is_nullable -%} |
| 147 Nullable: true, |
| 148 {%- endif -%} |
| 149 {%- if type.length is not none -%} |
| 150 FixedLength: {{type.length}}, |
| 151 {%- endif -%} |
| 152 ElementType: {{writeMojomType(typepkg, type.kind, pkg, exported, false)}}, |
| 153 }, |
| 154 } |
| 155 {%- endmacro -%} |
| 156 |
| 157 {%- macro writeTypeMapType(typepkg, type, pkg, exported) -%} |
| 158 {{typepkg}}TypeMapType{ |
| 159 Value: {{typepkg}}MapType{ |
| 160 {%- if type|is_nullable -%} |
| 161 Nullable: true, |
| 162 {%- endif -%} |
| 163 KeyType: {{writeMojomType(typepkg, type.key_kind, pkg, exported, false)}}, |
| 164 ValueType: {{writeMojomType(typepkg, type.value_kind, pkg, exported, false
)}}, |
| 165 }, |
| 166 } |
| 167 {%- endmacro -%} |
| 168 |
| 169 {%- macro writeMojomEnumType(typepkg, type, pkg, exported) -%} |
| 170 {{typepkg}}MojomEnum{ |
| 171 DeclData: &{{typepkg}}DeclarationData{ |
| 172 ShortName: &enumName_{{type|name}}, |
| 173 }, |
| 174 Values: []{{typepkg}}EnumValue{ |
| 175 {%- for field in type.fields -%} |
| 176 {{typepkg}}EnumValue{ |
| 177 DeclData: &{{typepkg}}DeclarationData{ |
| 178 ShortName: &enumFieldName_{{type|name}}_{{field|name}}, |
| 179 }, |
| 180 EnumTypeKey: {{writePackagedTypeID(typepkg, type, pkg)}}, |
| 181 IntValue: int32({{field.numeric_value}}), |
| 182 }, |
| 183 {%- endfor -%} |
| 184 }, |
| 185 } |
| 186 {%- endmacro -%} |
| 187 |
| 188 |
| 189 {%- macro writeMojomStructType(typepkg, type, pkg, exported) -%} |
| 190 {{typepkg}}MojomStruct{ |
| 191 DeclData: &{{typepkg}}DeclarationData{ |
| 192 ShortName: &structName_{{type|name}}, |
| 193 }, |
| 194 {%- if type|is_nullable -%} |
| 195 Nullable: true, |
| 196 {%- endif -%} |
| 197 Fields: []{{typepkg}}StructField{ |
| 198 {%- for field in type.fields -%} |
| 199 {{typepkg}}StructField{ |
| 200 DeclData: &{{typepkg}}DeclarationData{ |
| 201 ShortName: &structFieldName_{{type|name}}_{{field|name}}, |
| 202 }, |
| 203 Type: {{writeMojomType(typepkg, field.kind, pkg, exported, false)}}, |
| 204 }, |
| 205 {%- endfor -%} |
| 206 }, |
| 207 } |
| 208 {%- endmacro -%} |
| 209 |
| 210 |
| 211 {%- macro writeMojomUnionType(typepkg, type, pkg, exported) -%} |
| 212 {{typepkg}}MojomUnion{ |
| 213 DeclData: &{{typepkg}}DeclarationData{ |
| 214 ShortName: &unionName_{{type|name}}, |
| 215 }, |
| 216 {%- if type|is_nullable -%} |
| 217 Nullable: true, |
| 218 {%- endif -%} |
| 219 Fields: []{{typepkg}}UnionField{ |
| 220 {%- for field in type.fields -%} |
| 221 {{typepkg}}UnionField{ |
| 222 DeclData: &{{typepkg}}DeclarationData{ |
| 223 ShortName: &unionFieldName_{{type|name}}_{{field|name}}, |
| 224 }, |
| 225 Type: {{writeMojomType(typepkg, field.kind, pkg, exported, false)}}, |
| 226 Tag: {{field.ordinal}}, |
| 227 }, |
| 228 {%- endfor -%} |
| 229 }, |
| 230 } |
| 231 {%- endmacro -%} |
OLD | NEW |