Index: mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl |
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl |
index 09bf392911709808ac8cbdf7729d8df2486bc0a8..9325338ef6d1b73d1d5560f306d69e78119e725b 100644 |
--- a/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl |
+++ b/mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl |
@@ -18,14 +18,35 @@ void Serialize_({{struct.name}}Ptr input, mojo::internal::Buffer* buf, |
{%- if pf.field.kind|is_any_array_kind %} |
mojo::SerializeArray_<{{pf.field.kind|get_array_validate_params|indent(26)}}>( |
mojo::internal::Forward(input->{{pf.field.name}}), buf, &result->{{pf.field.name}}.ptr); |
+{%- elif pf.field.kind|is_map_kind %} |
+ mojo::Array<{{pf.field.kind.key_kind|cpp_result_type}}> {{pf.field.name}}_keys; |
+ mojo::Array<{{pf.field.kind.value_kind|cpp_result_type}}> {{pf.field.name}}_values; |
+ input->{{pf.field.name}}.DecomposeMapTo(&{{pf.field.name}}_keys, |
+ &{{pf.field.name}}_values); |
+ |
+ mojo::SerializeArray_<{{pf.field.kind.key_kind|get_map_validate_params|indent(26)}}>( |
+ mojo::internal::Forward({{pf.field.name}}_keys), buf, &result->{{pf.field.name}}_keys.ptr); |
+ mojo::SerializeArray_<{{pf.field.kind.value_kind|get_map_validate_params|indent(26)}}>( |
+ mojo::internal::Forward({{pf.field.name}}_values), buf, &result->{{pf.field.name}}_values.ptr); |
{%- else %} |
Serialize_(mojo::internal::Forward(input->{{pf.field.name}}), buf, &result->{{pf.field.name}}.ptr); |
{%- endif %} |
{%- if not pf.field.kind|is_nullable_kind %} |
+{%- if pf.field.kind|is_map_kind %} |
+ MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( |
+ !result->{{pf.field.name}}_keys.ptr, |
+ mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER, |
+ "null key array for {{pf.field.name}} field in {{struct.name}} struct"); |
+ MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( |
+ !result->{{pf.field.name}}_values.ptr, |
+ mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER, |
+ "null value array for {{pf.field.name}} field in {{struct.name}} struct"); |
+{%- else %} |
MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( |
!result->{{pf.field.name}}.ptr, |
mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER, |
"null {{pf.field.name}} field in {{struct.name}} struct"); |
+{%- endif %} |
{%- endif %} |
{%- elif pf.field.kind|is_any_handle_kind %} |
{%- if pf.field.kind|is_interface_kind %} |
@@ -54,7 +75,17 @@ void Deserialize_(internal::{{struct.name}}_Data* input, |
if (input) { |
{{struct.name}}Ptr result({{struct.name}}::New()); |
{%- for pf in struct.packed.packed_fields %} |
-{%- if pf.field.kind|is_object_kind %} |
+{%- if pf.field.kind|is_map_kind %} |
+ mojo::Array<{{pf.field.kind.key_kind|cpp_result_type}}> {{pf.field.name}}_keys; |
+ Deserialize_(input->{{pf.field.name}}_keys.ptr, &{{pf.field.name}}_keys); |
+ mojo::Array<{{pf.field.kind.value_kind|cpp_result_type}}> {{pf.field.name}}_values; |
+ Deserialize_(input->{{pf.field.name}}_values.ptr, &{{pf.field.name}}_values); |
+ result->{{pf.field.name}} = |
+ mojo::Map<{{pf.field.kind.key_kind|cpp_result_type}}, |
+ {{pf.field.kind.value_kind|cpp_result_type}}>( |
+ {{pf.field.name}}_keys.Pass(), |
+ {{pf.field.name}}_values.Pass()).Pass(); |
+{%- elif pf.field.kind|is_object_kind %} |
Deserialize_(input->{{pf.field.name}}.ptr, &result->{{pf.field.name}}); |
{%- elif pf.field.kind|is_interface_kind %} |
if (input->{{pf.field.name}}.is_valid()) |