Index: mojo/public/tools/bindings/generators/go_templates/mojom_type_macros.tmpl |
diff --git a/mojo/public/tools/bindings/generators/go_templates/mojom_type_macros.tmpl b/mojo/public/tools/bindings/generators/go_templates/mojom_type_macros.tmpl |
new file mode 100644 |
index 0000000000000000000000000000000000000000..bad74532586bb8730a58baa0c47e222da16cd1e5 |
--- /dev/null |
+++ b/mojo/public/tools/bindings/generators/go_templates/mojom_type_macros.tmpl |
@@ -0,0 +1,231 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+{%- macro writeMojomType(typepkg, type, pkg, exported=true, topLevel=true) -%} |
+{%- if type|identifier|identifier_check('WriteMojomType') -%} {#- Already printed out -#} |
+{{writeTypeTypeReference(typepkg, type, pkg)}} |
+{%- else -%} |
+ |
+{%- if type|mojom_type(typepkg) != "" -%}{#- simple kind case -#} |
+ &{{type|mojom_type(typepkg)}} |
+{%- elif type|is_array -%} |
+ &{{writeTypeArrayType(typepkg, type, pkg, exported)}} |
+{%- elif type|is_map -%} |
+ &{{writeTypeMapType(typepkg, type, pkg, exported)}} |
+{%- elif type|is_enum or type|is_struct or type|is_union -%} |
+ {%- if topLevel -%} |
+ {{- type|identifier|identifier_store('WriteMojomType') -}} |
+ {%- if type|is_enum -%} |
+ {{writeMojomEnumType(typepkg, type, pkg, exported)}} |
+ {%- elif type|is_struct -%} |
+ {{writeMojomStructType(typepkg, type, pkg, exported)}} |
+ {%- else -%} {#- Must be a union -#} |
+ {{writeMojomUnionType(typepkg, type, pkg, exported)}} |
+ {%- endif -%} |
+ {%- else -%} |
+ {{writeTypeTypeReference(typepkg, type, pkg)}} |
+ {%- endif -%} |
+{%- elif type|is_interface or type|is_interface_request -%} |
+ {{- type|identifier|identifier_store('WriteMojomType') -}} |
+ {{writeTypeTypeReference(typepkg, type, pkg)}} |
+{%- else -%} |
+ ERROR: UNSUPPORTED TYPE |
+{%- endif -%} |
+{%- endif -%} |
+{%- endmacro -%} |
+ |
+{%- macro writeTypeTypeReference(typepkg, type, pkg) -%} |
+&{{typepkg}}TypeTypeReference{ |
+ Value: {{writeTypeReference(typepkg, type, pkg)}}, |
+} |
+{%- endmacro -%} |
+ |
+{%- macro writeTypeReference(typepkg, type, pkg) -%} |
+{{typepkg}}TypeReference { |
+ {%- if type|is_nullable -%} |
+ Nullable: true, |
+ {%- endif -%} |
+ {%- if type|is_interface_request -%}{# Interface request collapses to interface. #} |
+ IsInterfaceRequest: true, |
+ Identifier: &{{writePackagedTypeID(typepkg, type.kind, pkg)}}, |
+ TypeKey: &{{writePackagedTypeID(typepkg, type.kind, pkg)}}, |
+ {%- else -%} |
+ Identifier: &{{writePackagedTypeID(typepkg, type, pkg)}}, |
+ TypeKey: &{{writePackagedTypeID(typepkg, type, pkg)}}, |
+ {%- endif -%} |
+} |
+{%- endmacro -%} |
+ |
+{%- macro writePackagedTypeID(typepkg, type, pkg) -%} |
+{%- if type|package != '' -%}{{type|package}}.{%- endif -%}ID_{{type|mojom_type_identifier}} |
+{%- endmacro -%} |
+ |
+ |
+{%- macro writeMojomTypeDef(typepkg, type, pkg, exported=True) -%} |
+{%- if should_gen_mojom_types -%} |
+{%- if type|is_enum -%} |
+// String names and labels used by the MojomEnum types. |
+var ( |
+ enumName_{{type|name}} = "{{type|name}}" |
+{% for field in type.fields %} |
+ enumFieldName_{{type|name}}_{{field|name}} = "{{field|name}}" |
+{% endfor %} |
+) |
+ |
+func {{type|mojom_type_identifier}}() {{typepkg}}MojomEnum { |
+ return {{ writeMojomType(typepkg, type, pkg, exported) }} |
+} |
+{%- elif type|is_struct -%} |
+// String names and labels used by the MojomStruct types. |
+var ( |
+ structName_{{type|name}} = "{{type|name}}" |
+{% for field in type.fields %} |
+ structFieldName_{{type|name}}_{{field|name}} = "{{field|name}}" |
+{% endfor %} |
+) |
+ |
+func {{type|mojom_type_identifier}}() {{typepkg}}MojomStruct { |
+ return {{ writeMojomType(typepkg, type, pkg, exported) }} |
+} |
+{%- elif type|is_union -%} |
+// String names and labels used by the MojomUnion types. |
+var ( |
+ unionName_{{type|name}} = "{{type|name}}" |
+{% for field in type.fields %} |
+ unionFieldName_{{type|name}}_{{field|name}} = "{{field|name}}" |
+{% endfor %} |
+) |
+ |
+func {{type|mojom_type_identifier}}() {{typepkg}}MojomUnion { |
+ return {{ writeMojomType(typepkg, type, pkg, exported) }} |
+} |
+{%- elif type|is_interface -%} |
+var ( |
+ interfaceName_{{type|name}} = "{{type|name}}" |
+{% for method in type.methods %} |
+ interfaceMethodName_{{type|name}}_{{method|name}} = "{{method|name}}" |
+{% endfor %} |
+) |
+ |
+func {{type|mojom_type_identifier}}() {{typepkg}}MojomInterface { |
+ responseParamsMap := make(map[string]*{{typepkg}}MojomStruct) |
+ _ = responseParamsMap // To avoid the declared but unused compiler error |
+{% for method in type.methods %} |
+ {% if method|has_response %} |
+ mstruct_{{method|name}} := {{method.response_param_struct|mojom_type_identifier}}() |
+ responseParamsMap[interfaceMethodName_{{type|name}}_{{method|name}}] = &mstruct_{{method|name}} |
+ {% endif %} |
+{% endfor %} |
+ return {{typepkg}}MojomInterface{ |
+ DeclData: &{{typepkg}}DeclarationData{ |
+ ShortName: &interfaceName_{{type|name}}, |
+ }, |
+ Methods: map[uint32]{{typepkg}}MojomMethod{ |
+{%- for method in type.methods -%} |
+ {{type|name(False)}}_{{method|name}}_Name: {{typepkg}}MojomMethod{ |
+ DeclData: &{{typepkg}}DeclarationData{ |
+ ShortName: &interfaceMethodName_{{type|name}}_{{method|name}}, |
+ }, |
+ Parameters: {{method.param_struct|mojom_type_identifier}}(), |
+ ResponseParams: responseParamsMap[interfaceMethodName_{{type|name}}_{{method|name}}], |
+ }, |
+{%- endfor -%} |
+ }, |
+ } |
+} |
+{%- else -%} |
+BAD TYPE NAME GIVEN |
+{%- endif -%} |
+{%- endif -%} |
+{%- endmacro -%} |
+ |
+{%- macro writeTypeArrayType(typepkg, type, pkg, exported) -%} |
+ {{typepkg}}TypeArrayType{ |
+ Value: {{typepkg}}ArrayType{ |
+ {%- if type|is_nullable -%} |
+ Nullable: true, |
+ {%- endif -%} |
+ {%- if type.length is not none -%} |
+ FixedLength: {{type.length}}, |
+ {%- endif -%} |
+ ElementType: {{writeMojomType(typepkg, type.kind, pkg, exported, false)}}, |
+ }, |
+ } |
+{%- endmacro -%} |
+ |
+{%- macro writeTypeMapType(typepkg, type, pkg, exported) -%} |
+ {{typepkg}}TypeMapType{ |
+ Value: {{typepkg}}MapType{ |
+ {%- if type|is_nullable -%} |
+ Nullable: true, |
+ {%- endif -%} |
+ KeyType: {{writeMojomType(typepkg, type.key_kind, pkg, exported, false)}}, |
+ ValueType: {{writeMojomType(typepkg, type.value_kind, pkg, exported, false)}}, |
+ }, |
+ } |
+{%- endmacro -%} |
+ |
+{%- macro writeMojomEnumType(typepkg, type, pkg, exported) -%} |
+ {{typepkg}}MojomEnum{ |
+ DeclData: &{{typepkg}}DeclarationData{ |
+ ShortName: &enumName_{{type|name}}, |
+ }, |
+ Values: []{{typepkg}}EnumValue{ |
+ {%- for field in type.fields -%} |
+ {{typepkg}}EnumValue{ |
+ DeclData: &{{typepkg}}DeclarationData{ |
+ ShortName: &enumFieldName_{{type|name}}_{{field|name}}, |
+ }, |
+ EnumTypeKey: {{writePackagedTypeID(typepkg, type, pkg)}}, |
+ IntValue: int32({{field.numeric_value}}), |
+ }, |
+ {%- endfor -%} |
+ }, |
+ } |
+{%- endmacro -%} |
+ |
+ |
+{%- macro writeMojomStructType(typepkg, type, pkg, exported) -%} |
+ {{typepkg}}MojomStruct{ |
+ DeclData: &{{typepkg}}DeclarationData{ |
+ ShortName: &structName_{{type|name}}, |
+ }, |
+ {%- if type|is_nullable -%} |
+ Nullable: true, |
+ {%- endif -%} |
+ Fields: []{{typepkg}}StructField{ |
+ {%- for field in type.fields -%} |
+ {{typepkg}}StructField{ |
+ DeclData: &{{typepkg}}DeclarationData{ |
+ ShortName: &structFieldName_{{type|name}}_{{field|name}}, |
+ }, |
+ Type: {{writeMojomType(typepkg, field.kind, pkg, exported, false)}}, |
+ }, |
+ {%- endfor -%} |
+ }, |
+ } |
+{%- endmacro -%} |
+ |
+ |
+{%- macro writeMojomUnionType(typepkg, type, pkg, exported) -%} |
+ {{typepkg}}MojomUnion{ |
+ DeclData: &{{typepkg}}DeclarationData{ |
+ ShortName: &unionName_{{type|name}}, |
+ }, |
+ {%- if type|is_nullable -%} |
+ Nullable: true, |
+ {%- endif -%} |
+ Fields: []{{typepkg}}UnionField{ |
+ {%- for field in type.fields -%} |
+ {{typepkg}}UnionField{ |
+ DeclData: &{{typepkg}}DeclarationData{ |
+ ShortName: &unionFieldName_{{type|name}}_{{field|name}}, |
+ }, |
+ Type: {{writeMojomType(typepkg, field.kind, pkg, exported, false)}}, |
+ Tag: {{field.ordinal}}, |
+ }, |
+ {%- endfor -%} |
+ }, |
+ } |
+{%- endmacro -%} |