anchor.diff:    final FakeJsonServer server;
     FakeJsonClient(this.server);
   
  -  Future<GeneratedMessage> invoke(
  -    ClientContext ctx, String serviceName, String methodName,
  -    GeneratedMessage request, GeneratedMessage response) async {
  -
  +  Future<GeneratedMessage> invoke(ClientContext ctx, String serviceName,
  +      String methodName, GeneratedMessage request,
  +      GeneratedMessage response) async {
       String requestJson = request.writeToJson();
       String replyJson =
           await server.messageHandler(serviceName, methodName, requestJson);
  
positive.code: import '../out/protos/service.pb.dart' as pb;
  
  class SearchService extends pb.SearchServiceBase {
      Future<pb.SearchResponse> search(
          ServerContext ctx, pb.SearchRequest request) async {
        var out = new pb.SearchResponse();
        if (request.query == 'hello' || request.query == 'world') {
          out.result.add('hello, world!');
        }
        return out;
      }
  }
  
  class FakeJsonServer {
  
negative.code:   var api = new pb.SearchServiceApi(new FakeJsonClient(server));
  
    test('end to end RPC using JSON', () async {
      var request = new pb.SearchRequest()..query = "hello";
      var reply = await api.search(new ClientContext(), request);
      expect(reply.result, ["hello, world!"]);
    });
  