1 size_t GetSerializedSize_(const {{struct.name}}Ptr& input) {
4 size_t size = sizeof(internal::{{struct.name}}_Data);
5 {%- for pf in struct.packed.packed_fields if pf.field.kind|is_object_kind %}
6 size += GetSerializedSize_(input->{{pf.field.name}});
11 void Serialize_({{struct.name}}Ptr input, mojo::internal::Buffer* buf,
12 internal::{{struct.name}}_Data** output) {
14 internal::{{struct.name}}_Data* result =
15 internal::{{struct.name}}_Data::New(buf);
16 {%- for pf in struct.packed.packed_fields %}
17 {%- if pf.field.kind|is_object_kind %}
18 Serialize_(mojo::internal::Forward(input->{{pf.field.name}}), buf, &result->{{pf.field.name}}.ptr);
19 {%- elif pf.field.kind|is_interface_kind %}
20 result->{{pf.field.name}} = input->{{pf.field.name}}.PassMessagePipe().release();
21 {%- elif pf.field.kind|is_any_handle_kind %}
22 result->{{pf.field.name}} = input->{{pf.field.name}}.release();
24 result->{{pf.field.name}} = input->{{pf.field.name}};
33 void Deserialize_(internal::{{struct.name}}_Data* input,
34 {{struct.name}}Ptr* output) {
36 {{struct.name}}Ptr result({{struct.name}}::New());
37 {%- for pf in struct.packed.packed_fields %}
38 {%- if pf.field.kind|is_object_kind %}
39 Deserialize_(input->{{pf.field.name}}.ptr, &result->{{pf.field.name}});
40 {%- elif pf.field.kind|is_interface_kind %}
41 if (input->{{pf.field.name}}.is_valid())
42 result->{{pf.field.name}}.Bind(mojo::MakeScopedHandle(mojo::internal::FetchAndReset(&input->{{pf.field.name}})));
43 {%- elif pf.field.kind|is_any_handle_kind %}
44 result->{{pf.field.name}}.reset(mojo::internal::FetchAndReset(&input->{{pf.field.name}}));
45 {%- elif pf.field.kind|is_enum_kind %}
46 result->{{pf.field.name}} = static_cast<{{pf.field.kind|cpp_wrapper_type}}>(
47 input->{{pf.field.name}});
49 result->{{pf.field.name}} = input->{{pf.field.name}};
52 *output = result.Pass();