OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 package rustgen | 5 package rustgen |
6 | 6 |
7 import ( | 7 import ( |
8 "log" | 8 "log" |
9 "sort" | 9 "sort" |
10 "strconv" | 10 "strconv" |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
75 Value int64 | 75 Value int64 |
76 } | 76 } |
77 | 77 |
78 type EnumTemplate struct { | 78 type EnumTemplate struct { |
79 Name string | 79 Name string |
80 // In declaration order. | 80 // In declaration order. |
81 Values []EnumValueTemplate | 81 Values []EnumValueTemplate |
82 Signed bool | 82 Signed bool |
83 } | 83 } |
84 | 84 |
| 85 type EndpointTemplate struct { |
| 86 Name string |
| 87 Interface string |
| 88 } |
| 89 |
85 type InterfaceMessageTemplate struct { | 90 type InterfaceMessageTemplate struct { |
86 Name string | 91 Name string |
87 // This is the ordinal name (denoted by '@x' in the IDL). | 92 // This is the ordinal name (denoted by '@x' in the IDL). |
88 MessageOrdinal uint32 | 93 MessageOrdinal uint32 |
89 MinVersion uint32 | 94 MinVersion uint32 |
90 RequestStruct StructTemplate | 95 RequestStruct StructTemplate |
91 // ResponseStruct.Name == "" if response not defined. | 96 // ResponseStruct.Name == "" if response not defined. |
92 ResponseStruct StructTemplate | 97 ResponseStruct StructTemplate |
93 } | 98 } |
94 | 99 |
95 type InterfaceTemplate struct { | 100 type InterfaceTemplate struct { |
96 Name string | 101 Name string |
97 ServiceName string | 102 ServiceName string |
| 103 Client EndpointTemplate |
| 104 Server EndpointTemplate |
98 Version uint32 | 105 Version uint32 |
99 Messages []InterfaceMessageTemplate | 106 Messages []InterfaceMessageTemplate |
100 Enums []EnumTemplate | 107 Enums []EnumTemplate |
101 Constants []ConstantTemplate | 108 Constants []ConstantTemplate |
102 } | 109 } |
103 | 110 |
104 // The type, name and initial value of the constant. | 111 // The type, name and initial value of the constant. |
105 // Describes mojom constants declared top level, in structs, and in | 112 // Describes mojom constants declared top level, in structs, and in |
106 // interfaces. | 113 // interfaces. |
107 type ConstantTemplate struct { | 114 type ConstantTemplate struct { |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 } | 296 } |
290 return | 297 return |
291 } | 298 } |
292 | 299 |
293 func NewInterfaceTemplate(context *Context, mojomInterface *mojom_types.MojomInt
erface) InterfaceTemplate { | 300 func NewInterfaceTemplate(context *Context, mojomInterface *mojom_types.MojomInt
erface) InterfaceTemplate { |
294 interface_name := mojomToRustName(mojomInterface.DeclData, context) | 301 interface_name := mojomToRustName(mojomInterface.DeclData, context) |
295 var service_name string | 302 var service_name string |
296 if mojomInterface.ServiceName != nil { | 303 if mojomInterface.ServiceName != nil { |
297 service_name = *mojomInterface.ServiceName | 304 service_name = *mojomInterface.ServiceName |
298 } | 305 } |
| 306 client := EndpointTemplate{ |
| 307 Name: interface_name + "Client", |
| 308 Interface: interface_name, |
| 309 } |
| 310 server := EndpointTemplate{ |
| 311 Name: interface_name + "Server", |
| 312 Interface: interface_name, |
| 313 } |
299 | 314 |
300 // Generate templates for the containing constants and enums | 315 // Generate templates for the containing constants and enums |
301 var constants []ConstantTemplate | 316 var constants []ConstantTemplate |
302 var enums []EnumTemplate | 317 var enums []EnumTemplate |
303 if decls := mojomInterface.DeclData.ContainedDeclarations; decls != nil
{ | 318 if decls := mojomInterface.DeclData.ContainedDeclarations; decls != nil
{ |
304 constants, enums = generateContainedDeclarations(context, decls) | 319 constants, enums = generateContainedDeclarations(context, decls) |
305 } | 320 } |
306 | 321 |
307 var msgs []InterfaceMessageTemplate | 322 var msgs []InterfaceMessageTemplate |
308 for _, mojomMethod := range mojomInterface.Methods { | 323 for _, mojomMethod := range mojomInterface.Methods { |
309 msg_name := assertNotReservedKeyword(interface_name + *mojomMeth
od.DeclData.ShortName) | 324 msg_name := assertNotReservedKeyword(interface_name + *mojomMeth
od.DeclData.ShortName) |
310 req_struct := NewStructTemplate(context, &mojomMethod.Parameters
) | 325 req_struct := NewStructTemplate(context, &mojomMethod.Parameters
) |
311 req_struct.Name = interface_name + req_struct.Name | 326 req_struct.Name = interface_name + req_struct.Name |
312 | 327 |
313 var resp_struct StructTemplate | 328 var resp_struct StructTemplate |
314 if mojomMethod.ResponseParams != nil { | 329 if mojomMethod.ResponseParams != nil { |
315 resp_struct = NewStructTemplate(context, mojomMethod.Res
ponseParams) | 330 resp_struct = NewStructTemplate(context, mojomMethod.Res
ponseParams) |
316 resp_struct.Name = interface_name + resp_struct.Name | 331 resp_struct.Name = interface_name + resp_struct.Name |
317 } | 332 } |
318 | 333 |
319 msgs = append(msgs, InterfaceMessageTemplate{ | 334 msgs = append(msgs, InterfaceMessageTemplate{ |
320 Name: msg_name, | 335 Name: msg_name, |
321 MessageOrdinal: mojomMethod.Ordinal, | 336 MessageOrdinal: mojomMethod.Ordinal, |
322 MinVersion: mojomMethod.MinVersion, | 337 MinVersion: mojomMethod.MinVersion, |
323 RequestStruct: req_struct, | 338 RequestStruct: req_struct, |
324 ResponseStruct: resp_struct, | 339 ResponseStruct: resp_struct, |
325 }) | 340 }) |
326 } | 341 } |
327 | |
328 return InterfaceTemplate{ | 342 return InterfaceTemplate{ |
329 Name: interface_name, | 343 Name: interface_name, |
330 ServiceName: service_name, | 344 ServiceName: service_name, |
| 345 Client: client, |
| 346 Server: server, |
331 Version: mojomInterface.CurrentVersion, | 347 Version: mojomInterface.CurrentVersion, |
332 Enums: enums, | 348 Enums: enums, |
333 Constants: constants, | 349 Constants: constants, |
334 Messages: msgs, | 350 Messages: msgs, |
335 } | 351 } |
336 } | 352 } |
337 | 353 |
338 // TODO(vardhan): We can make this function, along with all other New*Template() | 354 // TODO(vardhan): We can make this function, along with all other New*Template() |
339 // functions, be a method for InterfaceTemplate so that we don't have to pass | 355 // functions, be a method for InterfaceTemplate so that we don't have to pass |
340 // around |fileGraph| all over the place. | 356 // around |fileGraph| all over the place. |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
458 | 474 |
459 return SourceTemplate{ | 475 return SourceTemplate{ |
460 Constants: constants, | 476 Constants: constants, |
461 Structs: structs, | 477 Structs: structs, |
462 Unions: unions, | 478 Unions: unions, |
463 Enums: enums, | 479 Enums: enums, |
464 Interfaces: interfaces, | 480 Interfaces: interfaces, |
465 } | 481 } |
466 } | 482 } |
467 | 483 |
OLD | NEW |