Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | |
| 2 // for details. All rights reserved. Use of this source code is governed by a | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 part of protoc; | |
| 6 | |
| 7 class ClientApiGenerator extends ProtobufContainer { | |
| 8 final String classname; | |
| 9 final String fqname; | |
| 10 | |
| 11 final ProtobufContainer _parent; | |
| 12 final GenerationContext _context; | |
| 13 final ServiceDescriptorProto _descriptor; | |
| 14 | |
| 15 ClientApiGenerator(ServiceDescriptorProto descriptor, | |
| 16 ProtobufContainer parent, this._context) | |
| 17 : _descriptor = descriptor, | |
| 18 _parent = parent, | |
| 19 classname = (parent.classname == '') | |
| 20 ? descriptor.name | |
| 21 : '${parent.classname}_${descriptor.name}', | |
|
Søren Gjesse
2015/06/23 12:08:31
Can services be nested? If so please add a test fo
wibling
2015/06/23 13:26:34
No, I have simplified this to just descriptor.name
| |
| 22 fqname = (parent == null || parent.fqname == null) | |
| 23 ? descriptor.name | |
| 24 : (parent.fqname == '.' | |
| 25 ? '.${descriptor.name}' | |
| 26 : '${parent.fqname}.${descriptor.name}') { | |
| 27 _context.register(this); | |
| 28 } | |
| 29 | |
| 30 String get package => _parent.package; | |
| 31 | |
| 32 String _shortType(String typename) { | |
| 33 return typename.substring(typename.lastIndexOf('.')+1); | |
| 34 } | |
| 35 | |
| 36 void generate(IndentingWriter out) { | |
| 37 out.addBlock('class ${classname}Api {', '}', () { | |
| 38 out.println('ProtobufClient _client;'); | |
| 39 out.println('${classname}Api(this._client);'); | |
| 40 out.println(); | |
| 41 for (MethodDescriptorProto m in _descriptor.method) { | |
| 42 out.addBlock('Future<${_shortType(m.outputType)}> ${m.name}(' | |
| 43 '${_shortType(m.inputType)} request) ' | |
| 44 'async {', '}', () { | |
| 45 out.println( | |
| 46 'var resultBytes = await _client.Invoke(\'/${_descriptor.name}.' | |
| 47 '${m.name}\', request.writeToBuffer());'); | |
| 48 out.println('return new ${_shortType(m.outputType)}' | |
| 49 '.fromBuffer(resultBytes);'); | |
| 50 }); | |
| 51 } | |
| 52 }); | |
| 53 out.println(); | |
| 54 } | |
| 55 } | |
| OLD | NEW |