• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1size_t GetSerializedSize_(const {{struct.name}}Ptr& input) {
2  if (!input)
3    return 0;
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}});
7{%- endfor %}
8  return size;
9}
10
11void Serialize_({{struct.name}}Ptr input, mojo::internal::Buffer* buf,
12                internal::{{struct.name}}_Data** output) {
13  if (input) {
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{%-     if pf.field.kind|is_any_array_kind %}
19    mojo::SerializeArray_<{{pf.field.kind|get_array_validate_params|indent(26)}}>(
20        mojo::internal::Forward(input->{{pf.field.name}}), buf, &result->{{pf.field.name}}.ptr);
21{%-     else %}
22    Serialize_(mojo::internal::Forward(input->{{pf.field.name}}), buf, &result->{{pf.field.name}}.ptr);
23{%-     endif %}
24{%-     if not pf.field.kind|is_nullable_kind %}
25    MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
26        !result->{{pf.field.name}}.ptr,
27        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
28        "null {{pf.field.name}} field in {{struct.name}} struct");
29{%-     endif %}
30{%-   elif pf.field.kind|is_any_handle_kind %}
31{%-     if pf.field.kind|is_interface_kind %}
32    result->{{pf.field.name}} = input->{{pf.field.name}}.PassMessagePipe().release();
33{%-     else %}
34    result->{{pf.field.name}} = input->{{pf.field.name}}.release();
35{%-     endif %}
36{%-     if not pf.field.kind|is_nullable_kind %}
37    MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
38        !result->{{pf.field.name}}.is_valid(),
39        mojo::internal::VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE,
40        "invalid {{pf.field.name}} field in {{struct.name}} struct");
41{%-     endif %}
42{%-   else %}
43    result->{{pf.field.name}} = input->{{pf.field.name}};
44{%-   endif %}
45{%- endfor %}
46    *output = result;
47  } else {
48    *output = NULL;
49  }
50}
51
52void Deserialize_(internal::{{struct.name}}_Data* input,
53                  {{struct.name}}Ptr* output) {
54  if (input) {
55    {{struct.name}}Ptr result({{struct.name}}::New());
56{%- for pf in struct.packed.packed_fields %}
57{%-   if pf.field.kind|is_object_kind %}
58    Deserialize_(input->{{pf.field.name}}.ptr, &result->{{pf.field.name}});
59{%-   elif pf.field.kind|is_interface_kind %}
60    if (input->{{pf.field.name}}.is_valid())
61      result->{{pf.field.name}}.Bind(mojo::MakeScopedHandle(mojo::internal::FetchAndReset(&input->{{pf.field.name}})));
62{%-   elif pf.field.kind|is_any_handle_kind %}
63    result->{{pf.field.name}}.reset(mojo::internal::FetchAndReset(&input->{{pf.field.name}}));
64{%-   elif pf.field.kind|is_enum_kind %}
65    result->{{pf.field.name}} = static_cast<{{pf.field.kind|cpp_wrapper_type}}>(
66      input->{{pf.field.name}});
67{%-   else %}
68    result->{{pf.field.name}} = input->{{pf.field.name}};
69{%-   endif %}
70{%- endfor %}
71    *output = result.Pass();
72  } else {
73    output->reset();
74  }
75}
76