Index: mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl |
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl |
index cc186fb18ce35abad69562d24425b0e69f19ee23..ff9bb12ec8bbe1d062160a709e046a0db3478e2c 100644 |
--- a/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl |
+++ b/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl |
@@ -14,13 +14,19 @@ |
{%- macro get_serialized_size(struct, input_field_pattern) -%} |
size_t size = sizeof(internal::{{struct.name}}_Data); |
{%- for pf in struct.packed.packed_fields_in_ordinal_order if pf.field.kind|is_object_kind %} |
-{%- if pf.field.kind|is_native_only_kind %} |
+{%- set name = pf.field.name -%} |
+{%- set kind = pf.field.kind -%} |
+{%- if kind|is_native_only_kind %} |
size += mojo::internal::GetSerializedSizeNative_( |
- {{input_field_pattern|format(pf.field.name)}}); |
-{%- elif pf.field.kind|is_union_kind %} |
- size += GetSerializedSize_({{input_field_pattern|format(pf.field.name)}}, true); |
+ {{input_field_pattern|format(name)}}); |
+{%- elif kind|is_typemapped_kind %} |
+ size += |
+ {{kind|get_name_for_kind}}_SerializerTraits_<{{kind|cpp_wrapper_type}}> |
+ ::GetSize({{input_field_pattern|format(name)}}); |
+{%- elif kind|is_union_kind %} |
+ size += GetSerializedSize_({{input_field_pattern|format(name)}}, true); |
{%- else %} |
- size += GetSerializedSize_({{input_field_pattern|format(pf.field.name)}}); |
+ size += GetSerializedSize_({{input_field_pattern|format(name)}}); |
{%- endif %} |
{%- endfor %} |
{%- endmacro -%} |
@@ -60,6 +66,9 @@ |
{%- elif kind|is_native_only_kind %} |
mojo::internal::SerializeNative_( |
{{input_field}}, {{buffer}}, &{{output}}->{{name}}.ptr); |
+{%- elif kind|is_typemapped_kind %} |
+ {{kind|get_name_for_kind}}_SerializerTraits_<{{kind|cpp_wrapper_type}}> |
+ ::Serialize({{input_field}}, {{buffer}}, &{{output}}->{{name}}.ptr); |
{%- elif kind|is_union_kind %} |
internal::{{kind.name}}_Data* {{name}}_ptr = &{{output}}->{{name}}; |
SerializeUnion_(std::move({{input_field}}), {{buffer}}, &{{name}}_ptr, true); |
@@ -143,6 +152,12 @@ |
{{input}}->{{name}}.ptr, &{{output_field}}, {{context}})) { |
{{success}} = false; |
} |
+{%- elif kind|is_typemapped_kind %} |
+ if (!{{kind|get_name_for_kind}}_SerializerTraits_<{{kind|cpp_wrapper_type}}> |
+ ::Deserialize( |
+ {{input}}->{{name}}.ptr, &{{output_field}}, {{context}})) { |
+ {{success}} = false; |
+ } |
{%- elif kind|is_object_kind %} |
{%- if kind|is_union_kind %} |
if (!Deserialize_(&{{input}}->{{name}}, &{{output_field}}, {{context}})) |