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

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: Use unexported functions instead of variables 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_util_macros.tmpl" as util %}
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 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 bindings.NewRouter(p.PassMessagePipe(), waiter), 95 bindings.NewRouter(p.PassMessagePipe(), waiter),
95 bindings.NewCounter(), 96 bindings.NewCounter(),
96 } 97 }
97 } 98 }
98 99
99 func (p *{{interface|name}}_Proxy) Close_Proxy() { 100 func (p *{{interface|name}}_Proxy) Close_Proxy() {
100 p.router.Close() 101 p.router.Close()
101 } 102 }
102 103
103 {% for method in interface.methods %} 104 {% for method in interface.methods %}
104 {{struct_macros.define(method.param_struct, False)}} 105 {{struct_macros.define(method.param_struct, typepkg, pkg, False)}}
105 {%- if method|has_response %} 106 {%- if method|has_response %}
106 {{struct_macros.define(method.response_param_struct, False)}} 107 {{struct_macros.define(method.response_param_struct, typepkg, pkg, False)}}
107 {%- endif %} 108 {%- endif %}
108 func (p *{{interface|name}}_Proxy) {{method|name}}{{declare_request_params(metho d)}} { 109 func (p *{{interface|name}}_Proxy) {{method|name}}{{declare_request_params(metho d)}} {
109 payload := &{{method.param_struct|name(False)}}{ 110 payload := &{{method.param_struct|name(False)}}{
110 {% for field in (method.param_struct).fields %} 111 {% for field in (method.param_struct).fields %}
111 {{field|name(False)}}, 112 {{field|name(False)}},
112 {% endfor %} 113 {% endfor %}
113 } 114 }
114 header := bindings.MessageHeader{ 115 header := bindings.MessageHeader{
115 Type: {{interface|name(False)}}_{{method|name}}_Name, 116 Type: {{interface|name(False)}}_{{method|name}}_Name,
116 Flags: {{flags(method, False)}}, 117 Flags: {{flags(method, False)}},
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 type {{interface|name(False)}}_Stub struct { 164 type {{interface|name(False)}}_Stub struct {
164 connector *bindings.Connector 165 connector *bindings.Connector
165 impl {{interface|name}} 166 impl {{interface|name}}
166 } 167 }
167 168
168 func New{{interface|name}}Stub(r {{interface|name}}_Request, impl {{interface|na me}}, waiter bindings.AsyncWaiter) *bindings.Stub { 169 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) 170 connector := bindings.NewConnector(r.PassMessagePipe(), waiter)
170 return bindings.NewStub(connector, &{{interface|name(False)}}_Stub{conne ctor, impl}) 171 return bindings.NewStub(connector, &{{interface|name(False)}}_Stub{conne ctor, impl})
171 } 172 }
172 173
174 var (
175 interfaceName_{{interface|name}} = "{{interface|name}}"
176 {% for method in interface.methods %}
177 interfaceMethodName_{{interface|name}}_{{method|name}} = "{{method|name} }"
178 {% endfor %}
179 )
180
181 func {{util.typeName(interface, typepkg, pkg)}}() {{typepkg}}MojomInterface {
182 responseParamsMap := make(map[string]*{{typepkg}}MojomStruct)
183 _ = responseParamsMap // To avoid the declared but unused compiler error
184 {% for method in interface.methods %}
185 {% if method|has_response %}
186 mstruct_{{method|name}} := {{util.typeName(method.response_param_struct, typepkg, pkg)}}()
187 responseParamsMap[interfaceMethodName_{{interface|name}}_{{method|name}} ] = &mstruct_{{method|name}}
188 {% endif %}
189 {% endfor %}
190 return {{typepkg}}MojomInterface{
191 DeclData: &{{typepkg}}DeclarationData{
192 ShortName: &interfaceName_{{interface|name}},
193 },
194 Methods: map[uint32]{{typepkg}}MojomMethod{
195 {%- for method in interface.methods -%}
196 {{interface|name(False)}}_{{method|name}}_Name: {{typepk g}}MojomMethod{
197 DeclData: &{{typepkg}}DeclarationData{
198 ShortName: &interfaceMethodName_{{interf ace|name}}_{{method|name}},
199 },
200 Parameters: {{util.typeName(method.param_struct, typepkg, pkg)}}(),
201 ResponseParams: responseParamsMap[interfaceMetho dName_{{interface|name}}_{{method|name}}],
202 },
203 {%- endfor -%}
204 },
205 }
206 }
207 func (r *{{interface|name}}_Request) Type() {{typepkg}}MojomInterface {
208 return {{util.typeName(interface, typepkg, pkg)}}()
209 }
210
211 func (r *{{interface|name}}_Request) Desc() map[string]{{typepkg}}UserDefinedTyp e {
212 return Descriptor()
213 }
214
215
216
217 type {{interface|name}}_ServiceDescription struct{}
218
219 func (sd *{{interface|name}}_ServiceDescription) GetTopLevelInterface() (outMojo mInterface {{typepkg}}MojomInterface, err error) {
220 return {{util.typeName(interface, typepkg, pkg)}}(), nil
221 }
222
223 func (sd *{{interface|name}}_ServiceDescription) GetTypeDefinition(inTypeKey str ing) (outType mojom_types.UserDefinedType, err error) {
224 if udt, ok := Descriptor()[inTypeKey]; ok {
225 return udt, nil
226 }
227 return nil, fmt.Errorf("%s_ServiceDescription does not recognize %s", "{ {interface|name}}", inTypeKey)
228 }
229
230 func (sd *{{interface|name}}_ServiceDescription) GetAllTypeDefinitions() (outDef initions *map[string]mojom_types.UserDefinedType, err error) {
231 o := Descriptor()
232 return &o, nil
233 }
234
235 var _ {{descpkg}}ServiceDescription = (*{{interface|name}}_ServiceDescription)(n il)
236
237
173 func (s *{{interface|name(False)}}_Stub) Accept(message *bindings.Message) (err error) { 238 func (s *{{interface|name(False)}}_Stub) Accept(message *bindings.Message) (err error) {
174 switch message.Header.Type { 239 switch message.Header.Type {
175 {% for method in interface.methods %} 240 {% for method in interface.methods %}
176 case {{interface|name(False)}}_{{method|name}}_Name: 241 case {{interface|name(False)}}_{{method|name}}_Name:
177 {% if method|has_response %} 242 {% if method|has_response %}
178 if message.Header.Flags != bindings.MessageExpectsResponseFlag { 243 if message.Header.Flags != bindings.MessageExpectsResponseFlag {
179 {% else %} 244 {% else %}
180 if message.Header.Flags != bindings.MessageNoFlag { 245 if message.Header.Flags != bindings.MessageNoFlag {
181 {% endif %} 246 {% endif %}
182 return &bindings.ValidationError{bindings.MessageHeaderI nvalidFlags, 247 return &bindings.ValidationError{bindings.MessageHeaderI nvalidFlags,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 default: 285 default:
221 return &bindings.ValidationError{ 286 return &bindings.ValidationError{
222 bindings.MessageHeaderUnknownMethod, 287 bindings.MessageHeaderUnknownMethod,
223 fmt.Sprintf("unknown method %v", message.Header.Type), 288 fmt.Sprintf("unknown method %v", message.Header.Type),
224 } 289 }
225 } 290 }
226 return 291 return
227 } 292 }
228 293
229 {% endmacro %} 294 {% endmacro %}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698