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..9841a3bf4d5fda7f45f016ac920e8e7ff24354f0 |
--- /dev/null |
+++ b/mojo/public/tools/bindings/generators/go_templates/mojom_type_macros.tmpl |
@@ -0,0 +1,144 @@ |
+// 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. |
+ |
+{% import "mojom_util_macros.tmpl" as util %} |
+ |
+{%- macro writeMojomType(typepkg, t, pkg, exported=true, topLevel=true) -%} |
+{%- if t|identifier(pkg)|identifier_check('WriteMojomType') -%} {#- Already printed out -#} |
+{{writeTypeTypeReference(typepkg, t, pkg)}} |
+{%- else -%} |
+ |
+{%- if t|mojom_type(typepkg) != "" -%}{#- simple kind case -#} |
+ &{{t|mojom_type(typepkg)}} |
+{%- elif t|is_array -%} |
+ &{{typepkg}}TypeArrayType{ |
+ Value: {{typepkg}}ArrayType{ |
+ {%- if t|is_nullable -%} |
+ Nullable: true, |
+ {%- endif -%} |
+ {%- if t.length is not none -%} |
+ FixedLength: {{t.length}}, |
+ {%- endif -%} |
+ ElementType: {{writeMojomType(typepkg, t.kind, pkg, exported, false)}}, |
+ }, |
+ } |
+{%- elif t|is_map -%} |
+ &{{typepkg}}TypeMapType{ |
+ Value: {{typepkg}}MapType{ |
+ {%- if t|is_nullable -%} |
+ Nullable: true, |
+ {%- endif -%} |
+ KeyType: {{writeMojomType(typepkg, t.key_kind, pkg, exported, false)}}, |
+ ValueType: {{writeMojomType(typepkg, t.value_kind, pkg, exported, false)}}, |
+ }, |
+ } |
+{%- elif t|is_enum -%} |
+ {%- if topLevel -%} |
+ {{- t|identifier(pkg)|identifier_store('WriteMojomType') -}} |
+ {{typepkg}}MojomEnum{ |
+ DeclData: &{{typepkg}}DeclarationData{ |
+ ShortName: &enumName_{{t|name}}, |
+ }, |
+ Values: []{{typepkg}}EnumValue{ |
+ {%- for field in t.fields -%} |
+ {{typepkg}}EnumValue{ |
+ Value: {{typepkg}}ConstantOccurrence{ |
+ Value: &{{typepkg}}ConstantValueEnumValue{ |
+ Value: {{typepkg}}EnumConstantValue{ |
+ EnumType: {{writeTypeReference(typepkg, t, pkg)}}, |
+ EnumValueName: &enumFieldName_{{t|name}}_{{field|name}}, |
+ IntValue: int32({{field.numeric_value}}), |
+ }, |
+ }, |
+ }, |
+ }, |
+ {%- endfor -%} |
+ }, |
+ } |
+ {%- else -%} |
+ {{writeTypeTypeReference(typepkg, t, pkg)}} |
+ {%- endif -%} |
+{%- elif t|is_struct -%} |
+ {%- if topLevel -%} |
+ {{- t|identifier(pkg)|identifier_store('WriteMojomType') -}} |
+ {{typepkg}}MojomStruct{ |
+ DeclData: &{{typepkg}}DeclarationData{ |
+ ShortName: &structName_{{t|name}}, |
+ }, |
+ {%- if t|is_nullable -%} |
+ Nullable: true, |
+ {%- endif -%} |
+ Fields: []{{typepkg}}StructField{ |
+ {%- for field in t.fields -%} |
+ {{typepkg}}StructField{ |
+ DeclData: &{{typepkg}}DeclarationData{ |
+ ShortName: &structFieldName_{{t|name}}_{{field|name}}, |
+ }, |
+ FieldType: {{writeMojomType(typepkg, field.kind, pkg, exported, false)}}, |
+ }, |
+ {%- endfor -%} |
+ }, |
+ } |
+ {%- else -%} |
+ {{writeTypeTypeReference(typepkg, t, pkg)}} |
+ {%- endif -%} |
+{%- elif t|is_union -%} |
+ {%- if topLevel -%} |
+ {{- t|identifier(pkg)|identifier_store('WriteMojomType') -}} |
+ {{typepkg}}MojomUnion{ |
+ DeclData: &{{typepkg}}DeclarationData{ |
+ ShortName: &unionName_{{t|name}}, |
+ }, |
+ {%- if t|is_nullable -%} |
+ Nullable: true, |
+ {%- endif -%} |
+ Fields: []{{typepkg}}UnionField{ |
+ {%- for field in t.fields -%} |
+ {{typepkg}}UnionField{ |
+ DeclData: &{{typepkg}}DeclarationData{ |
+ ShortName: &unionFieldName_{{t|name}}_{{field|name}}, |
+ }, |
+ Type: {{writeMojomType(typepkg, field.kind, pkg, exported, false)}}, |
+ Tag: {{field.ordinal}}, |
+ }, |
+ {%- endfor -%} |
+ }, |
+ } |
+ {%- else -%} |
+ {{writeTypeTypeReference(typepkg, t, pkg)}} |
+ {%- endif -%} |
+{%- elif t|is_interface or t|is_interface_request -%} |
+ {{- t|identifier(pkg)|identifier_store('WriteMojomType') -}} |
+ {{writeTypeTypeReference(typepkg, t, pkg)}} |
+{%- else -%} |
+ ERROR: UNSUPPORTED TYPE |
+{%- endif -%} |
+{%- endif -%} |
+{%- endmacro -%} |
+ |
+{%- macro writeTypeTypeReference(typepkg, t, pkg) -%} |
+&{{typepkg}}TypeTypeReference{ |
+ Value: {{writeTypeReference(typepkg, t, pkg)}}, |
+} |
+{%- endmacro -%} |
+ |
+{%- macro writeTypeReference(typepkg, t, pkg) -%} |
+{{typepkg}}TypeReference { |
+ {%- if t|is_nullable -%} |
+ Nullable: true, |
+ {%- endif -%} |
+ {%- if t|is_interface_request -%}{# Interface request collapses to interface. #} |
+ IsInterfaceRequest: true, |
+ Identifier: &{{writePackagedTypeID(typepkg, t.kind, pkg)}}, |
+ TypeKey: &{{writePackagedTypeID(typepkg, t.kind, pkg)}}, |
+ {%- else -%} |
+ Identifier: &{{writePackagedTypeID(typepkg, t, pkg)}}, |
+ TypeKey: &{{writePackagedTypeID(typepkg, t, pkg)}}, |
+ {%- endif -%} |
+} |
+{%- endmacro -%} |
+ |
+{%- macro writePackagedTypeID(typepkg, t, pkg) -%} |
+{%- if t|package != '' -%}{{t|package}}.{%- endif -%}ID_{{util.typeName(t, typepkg, pkg)}} |
+{%- endmacro -%} |