Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(262)

Side by Side Diff: mojo/public/tools/bindings/generators/go_templates/interface.tmpl

Issue 1345263002: Generate Mojom Types in Go (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: GetIdentifier without a default Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 {% import "struct.tmpl" as struct_macros %} 5 {% import "struct.tmpl" as struct_macros %}
6 {% import "mojom_type_macros.tmpl" as mojom_type_macros %}
6 7
7 {%- macro declare_params(struct) %} 8 {%- macro declare_params(struct) %}
8 {%- for field in struct.fields -%} 9 {%- for field in struct.fields -%}
9 {{field|name(False)}} {{field.kind|go_type}}{% if not loop.last %}, {% e ndif %} 10 {{field|name(False)}} {{field.kind|go_type}}{% if not loop.last %}, {% e ndif %}
10 {%- endfor %} 11 {%- endfor %}
11 {%- endmacro %} 12 {%- endmacro %}
12 13
13 14
14 15
15 {% macro declare_request_params(method) %} 16 {% macro declare_request_params(method) %}
(...skipping 12 matching lines...) Expand all
28 bindings.MessageNoFlag 29 bindings.MessageNoFlag
29 {%- elif is_response: -%} 30 {%- elif is_response: -%}
30 bindings.MessageIsResponseFlag 31 bindings.MessageIsResponseFlag
31 {%- else -%} 32 {%- else -%}
32 bindings.MessageExpectsResponseFlag 33 bindings.MessageExpectsResponseFlag
33 {%- endif -%} 34 {%- endif -%}
34 {%- endmacro -%} 35 {%- endmacro -%}
35 36
36 37
37 38
38 {% macro define(interface) %} 39 {% macro define(interface, descpkg, typepkg, pkg) %}
39 type {{interface|name}} interface { 40 type {{interface|name}} interface {
40 {% for method in interface.methods %} 41 {% for method in interface.methods %}
41 {{method|name}}{{declare_request_params(method)}} 42 {{method|name}}{{declare_request_params(method)}}
42 {% endfor %} 43 {% endfor %}
43 } 44 }
44 45
45 var {{interface|name(False)}}_Name = "{{interface.module.namespace|replace("."," ::")}}::{{interface.name}}" 46 var {{interface|name(False)}}_Name = "{{interface.module.namespace|replace("."," ::")}}::{{interface.name}}"
46 47
47 type {{interface|name}}_Request bindings.InterfaceRequest 48 type {{interface|name}}_Request bindings.InterfaceRequest
48 49
(...skipping 12 matching lines...) Expand all
61 } 62 }
62 63
63 type {{interface|name}}_Factory interface { 64 type {{interface|name}}_Factory interface {
64 Create(request {{interface|name}}_Request) 65 Create(request {{interface|name}}_Request)
65 } 66 }
66 67
67 func (f *{{interface|name}}_ServiceFactory) Name() string { 68 func (f *{{interface|name}}_ServiceFactory) Name() string {
68 return {{interface|name(False)}}_Name 69 return {{interface|name(False)}}_Name
69 } 70 }
70 71
72 func (f *{{interface|name}}_ServiceFactory) ServiceDescription() {{descpkg}}Serv iceDescription {
73 return &{{interface|name}}_ServiceDescription{}
74 }
75
71 func (f *{{interface|name}}_ServiceFactory) Create(messagePipe system.MessagePip eHandle) { 76 func (f *{{interface|name}}_ServiceFactory) Create(messagePipe system.MessagePip eHandle) {
72 request := {{interface|name}}_Request{bindings.NewMessagePipeHandleOwner (messagePipe)} 77 request := {{interface|name}}_Request{bindings.NewMessagePipeHandleOwner (messagePipe)}
73 f.Delegate.Create(request) 78 f.Delegate.Create(request)
74 } 79 }
75 80
76 // CreateMessagePipeFor{{interface|name}} creates a message pipe for use with th e 81 // CreateMessagePipeFor{{interface|name}} creates a message pipe for use with th e
77 // {{interface|name}} interface with a {{interface|name}}_Request on one end and a {{interface|name}}_Pointer on the other. 82 // {{interface|name}} interface with a {{interface|name}}_Request on one end and a {{interface|name}}_Pointer on the other.
78 func CreateMessagePipeFor{{interface|name}}() ({{interface|name}}_Request, {{int erface|name}}_Pointer) { 83 func CreateMessagePipeFor{{interface|name}}() ({{interface|name}}_Request, {{int erface|name}}_Pointer) {
79 r, p := bindings.CreateMessagePipeForMojoInterface() 84 r, p := bindings.CreateMessagePipeForMojoInterface()
80 return {{interface|name}}_Request(r), {{interface|name}}_Pointer(p) 85 return {{interface|name}}_Request(r), {{interface|name}}_Pointer(p)
(...skipping 13 matching lines...) Expand all
94 bindings.NewRouter(p.PassMessagePipe(), waiter), 99 bindings.NewRouter(p.PassMessagePipe(), waiter),
95 bindings.NewCounter(), 100 bindings.NewCounter(),
96 } 101 }
97 } 102 }
98 103
99 func (p *{{interface|name}}_Proxy) Close_Proxy() { 104 func (p *{{interface|name}}_Proxy) Close_Proxy() {
100 p.router.Close() 105 p.router.Close()
101 } 106 }
102 107
103 {% for method in interface.methods %} 108 {% for method in interface.methods %}
104 {{struct_macros.define(method.param_struct, False)}} 109 {{struct_macros.define(method.param_struct, typepkg, pkg, False)}}
105 {%- if method|has_response %} 110 {%- if method|has_response %}
106 {{struct_macros.define(method.response_param_struct, False)}} 111 {{struct_macros.define(method.response_param_struct, typepkg, pkg, False)}}
107 {%- endif %} 112 {%- endif %}
108 func (p *{{interface|name}}_Proxy) {{method|name}}{{declare_request_params(metho d)}} { 113 func (p *{{interface|name}}_Proxy) {{method|name}}{{declare_request_params(metho d)}} {
109 payload := &{{method.param_struct|name(False)}}{ 114 payload := &{{method.param_struct|name(False)}}{
110 {% for field in (method.param_struct).fields %} 115 {% for field in (method.param_struct).fields %}
111 {{field|name(False)}}, 116 {{field|name(False)}},
112 {% endfor %} 117 {% endfor %}
113 } 118 }
114 header := bindings.MessageHeader{ 119 header := bindings.MessageHeader{
115 Type: {{interface|name(False)}}_{{method|name}}_Name, 120 Type: {{interface|name(False)}}_{{method|name}}_Name,
116 Flags: {{flags(method, False)}}, 121 Flags: {{flags(method, False)}},
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 type {{interface|name(False)}}_Stub struct { 168 type {{interface|name(False)}}_Stub struct {
164 connector *bindings.Connector 169 connector *bindings.Connector
165 impl {{interface|name}} 170 impl {{interface|name}}
166 } 171 }
167 172
168 func New{{interface|name}}Stub(r {{interface|name}}_Request, impl {{interface|na me}}, waiter bindings.AsyncWaiter) *bindings.Stub { 173 func New{{interface|name}}Stub(r {{interface|name}}_Request, impl {{interface|na me}}, waiter bindings.AsyncWaiter) *bindings.Stub {
169 connector := bindings.NewConnector(r.PassMessagePipe(), waiter) 174 connector := bindings.NewConnector(r.PassMessagePipe(), waiter)
170 return bindings.NewStub(connector, &{{interface|name(False)}}_Stub{conne ctor, impl}) 175 return bindings.NewStub(connector, &{{interface|name(False)}}_Stub{conne ctor, impl})
171 } 176 }
172 177
178 {{ mojom_type_macros.writeMojomTypeDef(typepkg, interface, pkg, exported) }}
179
180 func (f *{{interface|name}}_Request) ServiceDescription() {{descpkg}}ServiceDesc ription {
181 return &{{interface|name}}_ServiceDescription{}
182 }
183
184
185 type {{interface|name}}_ServiceDescription struct{}
186
187 func (sd *{{interface|name}}_ServiceDescription) GetTopLevelInterface() (outMojo mInterface {{typepkg}}MojomInterface, err error) {
188 return {{interface|mojom_type_identifier}}(), nil
189 }
190
191 func (sd *{{interface|name}}_ServiceDescription) GetTypeDefinition(inTypeKey str ing) (outType mojom_types.UserDefinedType, err error) {
192 if udt, ok := Descriptor()[inTypeKey]; ok {
193 return udt, nil
194 }
195 return nil, fmt.Errorf("%s_ServiceDescription does not recognize %s", "{ {interface|name}}", inTypeKey)
196 }
197
198 func (sd *{{interface|name}}_ServiceDescription) GetAllTypeDefinitions() (outDef initions *map[string]mojom_types.UserDefinedType, err error) {
199 o := Descriptor()
200 return &o, nil
201 }
202
203 var _ {{descpkg}}ServiceDescription = (*{{interface|name}}_ServiceDescription)(n il)
204
205
173 func (s *{{interface|name(False)}}_Stub) Accept(message *bindings.Message) (err error) { 206 func (s *{{interface|name(False)}}_Stub) Accept(message *bindings.Message) (err error) {
174 switch message.Header.Type { 207 switch message.Header.Type {
175 {% for method in interface.methods %} 208 {% for method in interface.methods %}
176 case {{interface|name(False)}}_{{method|name}}_Name: 209 case {{interface|name(False)}}_{{method|name}}_Name:
177 {% if method|has_response %} 210 {% if method|has_response %}
178 if message.Header.Flags != bindings.MessageExpectsResponseFlag { 211 if message.Header.Flags != bindings.MessageExpectsResponseFlag {
179 {% else %} 212 {% else %}
180 if message.Header.Flags != bindings.MessageNoFlag { 213 if message.Header.Flags != bindings.MessageNoFlag {
181 {% endif %} 214 {% endif %}
182 return &bindings.ValidationError{bindings.MessageHeaderI nvalidFlags, 215 return &bindings.ValidationError{bindings.MessageHeaderI nvalidFlags,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 default: 253 default:
221 return &bindings.ValidationError{ 254 return &bindings.ValidationError{
222 bindings.MessageHeaderUnknownMethod, 255 bindings.MessageHeaderUnknownMethod,
223 fmt.Sprintf("unknown method %v", message.Header.Type), 256 fmt.Sprintf("unknown method %v", message.Header.Type),
224 } 257 }
225 } 258 }
226 return 259 return
227 } 260 }
228 261
229 {% endmacro %} 262 {% endmacro %}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698