| Index: third_party/mojo/src/mojo/public/tools/bindings/generators/go_templates/interface.tmpl
|
| diff --git a/third_party/mojo/src/mojo/public/tools/bindings/generators/go_templates/interface.tmpl b/third_party/mojo/src/mojo/public/tools/bindings/generators/go_templates/interface.tmpl
|
| index 32ba383839d33b2e04724db70654b5ccd3283c05..c96441eaa105cf7c3b819df84d640659c06c59e7 100644
|
| --- a/third_party/mojo/src/mojo/public/tools/bindings/generators/go_templates/interface.tmpl
|
| +++ b/third_party/mojo/src/mojo/public/tools/bindings/generators/go_templates/interface.tmpl
|
| @@ -23,13 +23,13 @@
|
|
|
|
|
|
|
| -{%- macro flags(response_parameters, is_renponse) -%}
|
| +{%- macro flags(response_parameters, is_response) -%}
|
| {%- if not response_parameters -%}
|
| bindings.MessageNoFlag
|
| -{%- elif is_parameter: -%}
|
| - bindings.MessageExpectsResponseFlag
|
| -{%- else -%}
|
| +{%- elif is_response: -%}
|
| bindings.MessageIsResponseFlag
|
| +{%- else -%}
|
| + bindings.MessageExpectsResponseFlag
|
| {%- endif -%}
|
| {%- endmacro -%}
|
|
|
| @@ -45,19 +45,26 @@ type {{interface|name}} interface {
|
| type {{interface|name}}Request bindings.InterfaceRequest
|
| type {{interface|name}}Pointer bindings.InterfacePointer
|
|
|
| +// CreateMessagePipeFor{{interface|name}} creates a message pipe for use with the
|
| +// {{interface|name}} interface with a {{interface|name}}Request on one end and a {{interface|name}}Pointer on the other.
|
| +func CreateMessagePipeFor{{interface|name}}() ({{interface|name}}Request, {{interface|name}}Pointer) {
|
| + r, p := bindings.CreateMessagePipeForMojoInterface()
|
| + return {{interface|name}}Request(r), {{interface|name}}Pointer(p)
|
| +}
|
| +
|
| {% for method in interface.methods %}
|
| const {{interface|name(False)}}_{{method|name}}_Name = {{method.ordinal}}
|
| {% endfor %}
|
|
|
| type {{interface|name}}Proxy struct {
|
| router *bindings.Router
|
| - ids *bindings.Counter
|
| + ids bindings.Counter
|
| }
|
|
|
| func New{{interface|name}}Proxy(p {{interface|name}}Pointer, waiter bindings.AsyncWaiter) *{{interface|name}}Proxy {
|
| return &{{interface|name}}Proxy{
|
| bindings.NewRouter(p.PassMessagePipe(), waiter),
|
| - &bindings.Counter{},
|
| + bindings.NewCounter(),
|
| }
|
| }
|
|
|
| @@ -80,29 +87,35 @@ func (p *{{interface|name}}Proxy) {{method|name}}{{declare_request_params(method
|
| Type: {{interface|name(False)}}_{{method|name}}_Name,
|
| Flags: {{flags(method.response_parameters, False)}},
|
| {% if method.response_parameters %}
|
| - RequestId: p.ids.Next(),
|
| + RequestId: p.ids.Count(),
|
| {% endif %}
|
| }
|
| var message *bindings.Message
|
| if message, err = bindings.EncodeMessage(header, payload); err != nil {
|
| err = fmt.Errorf("can't encode request: %v", err.Error())
|
| + p.Close_proxy()
|
| return
|
| }
|
| {% if method.response_parameters %}
|
| readResult := <-p.router.AcceptWithResponse(message)
|
| if err = readResult.Error; err != nil {
|
| + p.Close_proxy()
|
| return
|
| }
|
| var response {{method|response_struct_from_method|name(False)}}
|
| if err = readResult.Message.DecodePayload(&response); err != nil {
|
| err = fmt.Errorf("can't decode response: %v", err.Error())
|
| + p.Close_proxy()
|
| return
|
| }
|
| {% for field in (method|response_struct_from_method).fields %}
|
| {{field|name(False)}} = response.{{field|name(False)}}
|
| {% endfor %}
|
| {% else %}
|
| - err = p.router.Accept(message)
|
| + if err = p.router.Accept(message); err != nil {
|
| + p.Close_proxy()
|
| + return
|
| + }
|
| {% endif %}
|
| return
|
| }
|
|
|