blob: dd962662937ce1292f07991d1fe2c5ab1d937a17 [file] [log] [blame]
// 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 {
// The service that this Client API connects to.
final ServiceGenerator service;
ClientApiGenerator(this.service);
// Subclasses can override this.
String get _clientType => '$_protobufImportPrefix.RpcClient';
void generate(IndentingWriter out) {
var className = service._descriptor.name;
out.addBlock('class ${className}Api {', '}', () {
out.println('$_clientType _client;');
out.println('${className}Api(this._client);');
out.println();
for (MethodDescriptorProto m in service._descriptor.method) {
generateMethod(out, m);
}
});
out.println();
}
// Subclasses can override this.
void generateMethod(IndentingWriter out, MethodDescriptorProto m) {
var methodName = service._methodName(m.name);
var inputType = service._getDartClassName(m.inputType);
var outputType = service._getDartClassName(m.outputType);
out.addBlock(
'Future<$outputType> $methodName('
'$_protobufImportPrefix.ClientContext ctx, $inputType request) {',
'}', () {
out.println('var emptyResponse = new $outputType();');
out.println(
'return _client.invoke<$outputType>(ctx, \'${service._descriptor.name}\', '
'\'${m.name}\', request, emptyResponse);');
});
}
}