abstract class TestServiceBase extends $pb.GeneratedService {
  $async.Future<$0.SomeReply> aMethod($pb.ServerContext ctx, $0.SomeRequest request);
  $async.Future<$1.AnotherReply> anotherMethod($pb.ServerContext ctx, $1.EmptyMessage request);

  $pb.GeneratedMessage createRequest($core.String method) {
    switch (method) {
      case 'AMethod': return $0.SomeRequest();
      case 'AnotherMethod': return $1.EmptyMessage();
      default: throw $core.ArgumentError('Unknown method: $method');
    }
  }

  $async.Future<$pb.GeneratedMessage> handleCall($pb.ServerContext ctx, $core.String method, $pb.GeneratedMessage request) {
    switch (method) {
      case 'AMethod': return this.aMethod(ctx, request);
      case 'AnotherMethod': return this.anotherMethod(ctx, request);
      default: throw $core.ArgumentError('Unknown method: $method');
    }
  }

  $core.Map<$core.String, $core.dynamic> get $json => TestServiceBase$json;
  $core.Map<$core.String, $core.Map<$core.String, $core.dynamic>> get $messageJson => TestServiceBase$messageJson;
}

