From 6482d5dc90267144f11ccd63fdd8e4f3fbcf6d8b Mon Sep 17 00:00:00 2001
From: Jorge Canizales <jcanizales@google.com>
Date: Tue, 21 Apr 2015 01:30:00 -0700
Subject: [PATCH] Makes the runtime serialize alright.

---
 src/objective-c/ProtoRPC/ProtoRPC.m | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/objective-c/ProtoRPC/ProtoRPC.m b/src/objective-c/ProtoRPC/ProtoRPC.m
index 1b046845ce..4a2372e240 100644
--- a/src/objective-c/ProtoRPC/ProtoRPC.m
+++ b/src/objective-c/ProtoRPC/ProtoRPC.m
@@ -33,7 +33,10 @@
 
 #import "ProtoRPC.h"
 
+#import <ProtocolBuffers/ProtocolBuffers.h>
 #import <RxLibrary/GRXWriteable.h>
+#import <RxLibrary/GRXWriter.h>
+#import <RxLibrary/GRXWriter+Transformations.h>
 
 @implementation ProtoRPC {
   id<GRXWriteable> _responseWriteable;
@@ -60,7 +63,13 @@
     [NSException raise:NSInvalidArgumentException
                 format:@"A protobuf class to parse the responses must be provided."];
   }
-  if ((self = [super initWithHost:host method:method requestsWriter:requestsWriter])) {
+  // A writer that serializes the proto messages to send.
+  id<GRXWriter> bytesWriter =
+      [[[GRXWriter alloc] initWithWriter:requestsWriter] map:^id(PBGeneratedMessage *proto) {
+        return [proto data];
+      }];
+  if ((self = [super initWithHost:host method:method requestsWriter:bytesWriter])) {
+    // A writeable that parses the proto messages received.
     _responseWriteable = [[GRXWriteable alloc] initWithValueHandler:^(NSData *value) {
       [responsesWriteable didReceiveValue:[responseClass parseFromData:value]];
     } completionHandler:^(NSError *errorOrNil) {
@@ -76,6 +85,7 @@
 
 - (void)startWithWriteable:(id<GRXWriteable>)writeable {
   [super startWithWriteable:writeable];
+  // Break retain cycles.
   _responseWriteable = nil;
 }
 @end
-- 
GitLab