| 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 -%}
|
|
|