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

Unified Diff: mojo/public/tools/bindings/generators/cpp_templates/struct_serialization_definition.tmpl

Issue 611633002: mojom: Add associative arrays to the mojom language. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix gn build. Created 6 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/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())

Powered by Google App Engine
This is Rietveld 408576698