Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(973)

Unified Diff: mojo/public/tools/bindings/generators/go_templates/mojom_type_macros.tmpl

Issue 1345263002: Generate Mojom Types in Go (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Address Naming changes and Comment Updates Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 -%}

Powered by Google App Engine
This is Rietveld 408576698