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

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

Issue 1526533002: [mojo] Add pickling support for native-only structs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@bindings-4-bool-deserialize
Patch Set: merge Created 5 years 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_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 08989492631f2dd823f7b3de70b9872e1ac6112c..cc186fb18ce35abad69562d24425b0e69f19ee23 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
@@ -14,7 +14,10 @@
{%- 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_union_kind %}
+{%- if pf.field.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);
{%- else %}
size += GetSerializedSize_({{input_field_pattern|format(pf.field.name)}});
@@ -54,6 +57,9 @@
{{kind.value_kind|get_map_validate_params_ctor_args|indent(10)}});
mojo::SerializeMap_(std::move({{input_field}}), {{buffer}},
&{{output}}->{{name}}.ptr, &{{name}}_validate_params);
+{%- elif kind|is_native_only_kind %}
+ mojo::internal::SerializeNative_(
+ {{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);
@@ -132,7 +138,12 @@
if ({{input}}->header_.version < {{pf.min_version}})
break;
{%- endif %}
-{%- if kind|is_object_kind %}
+{%- if kind|is_native_only_kind %}
+ if (!DeserializeNative_(
+ {{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}}))
{{success}} = false;

Powered by Google App Engine
This is Rietveld 408576698