| Index: mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
|
| diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
|
| index bb5b777346b0ac9fed58efb2bbf4c5ad5def354e..9cade2d118c5b6c9db554f18a709a3095fff7c8b 100644
|
| --- a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
|
| +++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
|
| @@ -5,7 +5,14 @@
|
|
|
| {%- macro alloc_params(parameters) %}
|
| {%- for param in parameters %}
|
| -{%- if param.kind|is_object_kind %}
|
| +{%- if param.kind|is_map_kind %}
|
| +mojo::Array<{{param.kind.key_kind|cpp_result_type}}> p{{loop.index}}_keys;
|
| +Deserialize_(params->{{param.name}}_keys.ptr, &p{{loop.index}}_keys);
|
| +mojo::Array<{{param.kind.value_kind|cpp_result_type}}> p{{loop.index}}_values;
|
| +Deserialize_(params->{{param.name}}_values.ptr, &p{{loop.index}}_values);
|
| +{{param.kind|cpp_result_type}} p{{loop.index}}(p{{loop.index}}_keys.Pass(),
|
| + p{{loop.index}}_values.Pass());
|
| +{%- elif param.kind|is_object_kind %}
|
| {{param.kind|cpp_result_type}} p{{loop.index}};
|
| Deserialize_(params->{{param.name}}.ptr, &p{{loop.index}});
|
| {% endif -%}
|
| @@ -33,12 +40,27 @@ params->{{param.name}}
|
| {%- endfor %}
|
| {%- endmacro %}
|
|
|
| +{%- macro mapping_prelude(parameters) -%}
|
| +{%- for param in parameters %}
|
| +{%- if param.kind|is_map_kind %}
|
| + mojo::Array<{{param.kind.key_kind|cpp_result_type}}> in_{{param.name}}_keys;
|
| + mojo::Array<{{param.kind.value_kind|cpp_result_type}}> in_{{param.name}}_values;
|
| + in_{{param.name}}.DecomposeMapTo(&in_{{param.name}}_keys,
|
| + &in_{{param.name}}_values);
|
| +{%- endif -%}
|
| +{%- endfor -%}
|
| +{%- endmacro %}
|
| +
|
| +
|
| {%- macro compute_payload_size(params_name, parameters) -%}
|
| size_t payload_size =
|
| mojo::internal::Align(sizeof({{params_name}}));
|
| {#--- Computes #}
|
| {%- for param in parameters %}
|
| -{%- if param.kind|is_object_kind %}
|
| +{%- if param.kind|is_map_kind %}
|
| + payload_size += GetSerializedSize_(in_{{param.name}}_keys);
|
| + payload_size += GetSerializedSize_(in_{{param.name}}_values);
|
| +{%- elif param.kind|is_object_kind %}
|
| payload_size += GetSerializedSize_(in_{{param.name}});
|
| {%- endif %}
|
| {%- endfor %}
|
| @@ -55,14 +77,30 @@ params->{{param.name}}
|
| {%- if param.kind|is_any_array_kind %}
|
| mojo::SerializeArray_<{{param.kind|get_array_validate_params|indent(24)}}>(
|
| mojo::internal::Forward(in_{{param.name}}), builder.buffer(), ¶ms->{{param.name}}.ptr);
|
| +{%- elif param.kind|is_map_kind %}
|
| + mojo::SerializeArray_<{{param.kind.key_kind|get_map_validate_params|indent(24)}}>(
|
| + mojo::internal::Forward(in_{{param.name}}_keys), builder.buffer(), ¶ms->{{param.name}}_keys.ptr);
|
| + mojo::SerializeArray_<{{param.kind.value_kind|get_map_validate_params|indent(24)}}>(
|
| + mojo::internal::Forward(in_{{param.name}}_values), builder.buffer(), ¶ms->{{param.name}}_values.ptr);
|
| {%- else %}
|
| Serialize_(mojo::internal::Forward(in_{{param.name}}), builder.buffer(), ¶ms->{{param.name}}.ptr);
|
| {%- endif %}
|
| {%- if not param.kind|is_nullable_kind %}
|
| +{%- if param.kind|is_map_kind %}
|
| + MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
|
| + !params->{{param.name}}_keys.ptr,
|
| + mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
|
| + "null key array for {{param.name}} argument in {{params_description}}");
|
| + MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
|
| + !params->{{param.name}}_values.ptr,
|
| + mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
|
| + "null key array for {{param.name}} argument in {{params_description}}");
|
| +{%- else %}
|
| MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
|
| !params->{{param.name}}.ptr,
|
| mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
|
| "null {{param.name}} argument in {{params_description}}");
|
| +{%- endif %}
|
| {%- endif %}
|
| {%- elif param.kind|is_any_handle_kind %}
|
| {%- if param.kind|is_interface_kind or
|
| @@ -138,6 +176,8 @@ bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept(
|
| "%s.%s request"|format(interface.name, method.name) %}
|
| void {{proxy_name}}::{{method.name}}(
|
| {{interface_macros.declare_request_params("in_", method)}}) {
|
| + {{mapping_prelude(method.parameters)}}
|
| +
|
| {{compute_payload_size(params_name, method.parameters)}}
|
|
|
| {%- if method.response_parameters != None %}
|
| @@ -193,6 +233,8 @@ class {{class_name}}_{{method.name}}_ProxyToResponder
|
| };
|
| void {{class_name}}_{{method.name}}_ProxyToResponder::Run(
|
| {{interface_macros.declare_params("in_", method.response_parameters)}}) const {
|
| + {{mapping_prelude(method.response_parameters)}}
|
| +
|
| {{compute_payload_size(params_name, method.response_parameters)}}
|
| mojo::internal::ResponseMessageBuilder builder(
|
| {{message_name}}, payload_size, request_id_);
|
|
|