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 aec2afa93e5eb81446e335f5ae7c7751cd5ee976..5d8b944fb1a5a359b29ab36245dfa39b1cec890c 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 |
@@ -16,6 +16,8 @@ void Serialize_({{struct.name}}Ptr input, mojo::internal::Buffer* buf, |
{%- for pf in struct.packed.packed_fields %} |
{%- if pf.field.kind|is_object_kind %} |
Serialize_(mojo::internal::Forward(input->{{pf.field.name}}), buf, &result->{{pf.field.name}}.ptr); |
+{%- elif pf.field.kind|is_interface_kind %} |
+ result->{{pf.field.name}} = input->{{pf.field.name}}.PassMessagePipe().release(); |
{%- elif pf.field.kind|is_handle_kind %} |
result->{{pf.field.name}} = input->{{pf.field.name}}.release(); |
{%- else %} |
@@ -35,6 +37,9 @@ void Deserialize_(internal::{{struct.name}}_Data* input, |
{%- for pf in struct.packed.packed_fields %} |
{%- if 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()) |
+ result->{{pf.field.name}}.Bind(mojo::MakeScopedHandle(mojo::internal::FetchAndReset(&input->{{pf.field.name}}))); |
{%- elif pf.field.kind|is_handle_kind %} |
result->{{pf.field.name}}.reset(mojo::internal::FetchAndReset(&input->{{pf.field.name}})); |
{%- elif pf.field.kind|is_enum_kind %} |