Index: lib/client_generator.dart |
diff --git a/lib/client_generator.dart b/lib/client_generator.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..bffbcae170e3867ffaaafcfea9cffb4f46cc21ae |
--- /dev/null |
+++ b/lib/client_generator.dart |
@@ -0,0 +1,56 @@ |
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+part of protoc; |
+ |
+class ClientApiGenerator extends ProtobufContainer { |
+ final String classname; |
+ final String fqname; |
+ |
+ final ProtobufContainer _parent; |
+ final GenerationContext _context; |
+ final ServiceDescriptorProto _descriptor; |
+ |
+ ClientApiGenerator(ServiceDescriptorProto descriptor, |
+ ProtobufContainer parent, this._context) |
+ : _descriptor = descriptor, |
+ _parent = parent, |
+ classname = descriptor.name, |
+ fqname = (parent == null || parent.fqname == null) |
+ ? descriptor.name |
+ : (parent.fqname == '.' |
+ ? '.${descriptor.name}' |
+ : '${parent.fqname}.${descriptor.name}') { |
+ _context.register(this); |
+ } |
+ |
+ String get package => _parent.package; |
+ |
+ String _shortType(String typename) { |
+ return typename.substring(typename.lastIndexOf('.')+1); |
+ } |
+ |
+ void generate(IndentingWriter out) { |
+ out.addBlock('class ${classname}Api {', '}', () { |
+ out.println('RpcClient _client;'); |
+ out.println('${classname}Api(this._client);'); |
+ out.println(); |
+ for (MethodDescriptorProto m in _descriptor.method) { |
+ // lowercase first letter in method name. |
+ var methodName = |
+ m.name.substring(0,1).toLowerCase() + m.name.substring(1); |
+ out.addBlock('Future<${_shortType(m.outputType)}> $methodName(' |
+ 'ClientContext ctx, ${_shortType(m.inputType)} request) ' |
+ 'async {', '}', () { |
+ out.println('var emptyResponse = new ${_shortType(m.outputType)}();'); |
+ out.println('var result = await _client.invoke(ctx, ' |
+ '\'${_descriptor.name}\', \'${m.name}\', ' |
+ 'request, emptyResponse);'); |
+ out.println('return result;'); |
+ }); |
+ } |
+ }); |
+ out.println(); |
+ } |
+} |