1 {%- set class_name = interface.name %}
2 {%- set proxy_name = interface.name ~ "Proxy" %}
4 {{proxy_name}}::{{proxy_name}}(mojo::MessageReceiver* receiver)
5 : receiver_(receiver) {
8 {#--- Proxy definitions #}
9 {%- macro params_list(method) %}
10 {%- for param in method.parameters -%}
11 {{param.kind|cpp_const_wrapper_type}} in_{{param.name}}
12 {%- if not loop.last %}, {% endif %}
16 {%- for method in interface.methods %}
17 {%- set name = "internal::k%s_%s_Name"|format(interface.name, method.name) %}
19 "internal::%s_%s_Params_Data"|format(interface.name, method.name) %}
20 void {{proxy_name}}::{{method.name}}({{params_list(method)}}) {
22 mojo::internal::Align(sizeof({{params_name}}));
24 {%- for param in method.parameters %}
25 {%- if param.kind|is_object_kind %}
26 if (!in_{{param.name}}.is_null())
27 payload_size += mojo::internal::Unwrap(in_{{param.name}})->ComputeSize();
31 mojo::internal::MessageBuilder builder({{name}}, payload_size);
33 {{params_name}}* params =
34 {{params_name}}::New(builder.buffer());
37 {% for param in method.parameters %}
38 {%- if param.kind|is_object_kind %}
39 if (!in_{{param.name}}.is_null())
40 params->set_{{param.name}}(
41 mojo::internal::Unwrap(in_{{param.name}})->Clone(builder.buffer()));
42 {%- elif param.kind|is_handle_kind %}
43 params->set_{{param.name}}(in_{{param.name}}.release());
45 params->set_{{param.name}}(in_{{param.name}});
49 mojo::Message message;
50 params->EncodePointersAndHandles(&message.handles);
52 message.data = builder.Finish();
54 receiver_->Accept(&message);
58 {{class_name}}Stub::{{class_name}}Stub({{class_name}}* sink)
62 {#--- Stub definition #}
63 {%- macro params(method) %}
64 {%- for param in method.parameters %}
65 {%- if param.kind|is_object_kind -%}
66 mojo::internal::Wrap(params->{{param.name}}())
67 {%- elif param.kind|is_handle_kind -%}
68 mojo::MakePassable(params->{{param.name}}()).Pass()
70 params->{{param.name}}()
72 {%- if not loop.last %}, {% endif %}
76 bool {{class_name}}Stub::Accept(mojo::Message* message) {
77 switch (message->data->header.name) {
78 {%- for method in interface.methods %}
79 case internal::k{{class_name}}_{{method.name}}_Name: {
80 internal::{{class_name}}_{{method.name}}_Params_Data* params =
81 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data*>(
82 message->data->payload);
84 if (!params->DecodePointersAndHandles(message))
86 sink_->{{method.name}}({{params(method)}});
87 params->CloseHandles();