aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/objective-c/ProtoRPC
diff options
context:
space:
mode:
authorGravatar Muxi Yan <mxyan@google.com>2018-10-22 18:36:59 -0700
committerGravatar Muxi Yan <mxyan@google.com>2018-10-22 18:36:59 -0700
commit76ddfcb6cb87611addcbc68b01264e37a4705d27 (patch)
tree032ce57e6b0b82f325151fb051b8d03068c68b1f /src/objective-c/ProtoRPC
parente13c8678264d85353bb2ce49ae829c03f6c9493f (diff)
Propagate internal error when failed parsing proto
Diffstat (limited to 'src/objective-c/ProtoRPC')
-rw-r--r--src/objective-c/ProtoRPC/ProtoRPC.m35
1 files changed, 19 insertions, 16 deletions
diff --git a/src/objective-c/ProtoRPC/ProtoRPC.m b/src/objective-c/ProtoRPC/ProtoRPC.m
index a6c88488fc..6085f89356 100644
--- a/src/objective-c/ProtoRPC/ProtoRPC.m
+++ b/src/objective-c/ProtoRPC/ProtoRPC.m
@@ -27,6 +27,24 @@
#import <RxLibrary/GRXWriteable.h>
#import <RxLibrary/GRXWriter+Transformations.h>
+/**
+ * Generate an NSError object that represents a failure in parsing a proto class.
+ */
+static NSError *ErrorForBadProto(id proto, Class expectedClass, NSError *parsingError) {
+ NSDictionary *info = @{
+ NSLocalizedDescriptionKey : @"Unable to parse response from the server",
+ NSLocalizedRecoverySuggestionErrorKey :
+ @"If this RPC is idempotent, retry "
+ @"with exponential backoff. Otherwise, query the server status before "
+ @"retrying.",
+ NSUnderlyingErrorKey : parsingError,
+ @"Expected class" : expectedClass,
+ @"Received value" : proto,
+ };
+ // TODO(jcanizales): Use kGRPCErrorDomain and GRPCErrorCodeInternal when they're public.
+ return [NSError errorWithDomain:@"io.grpc" code:13 userInfo:info];
+}
+
@implementation GRPCUnaryProtoCall {
GRPCStreamingProtoCall *_call;
}
@@ -201,7 +219,7 @@
} else {
if ([handler respondsToSelector:@selector(closedWithTrailingMetadata:error:)]) {
dispatch_async(handler.dispatchQueue, ^{
- [handler closedWithTrailingMetadata:nil error:error];
+ [handler closedWithTrailingMetadata:nil error:ErrorForBadProto(message, _responseClass, error)];
});
}
_handler = nil;
@@ -232,21 +250,6 @@
@end
-static NSError *ErrorForBadProto(id proto, Class expectedClass, NSError *parsingError) {
- NSDictionary *info = @{
- NSLocalizedDescriptionKey : @"Unable to parse response from the server",
- NSLocalizedRecoverySuggestionErrorKey :
- @"If this RPC is idempotent, retry "
- @"with exponential backoff. Otherwise, query the server status before "
- @"retrying.",
- NSUnderlyingErrorKey : parsingError,
- @"Expected class" : expectedClass,
- @"Received value" : proto,
- };
- // TODO(jcanizales): Use kGRPCErrorDomain and GRPCErrorCodeInternal when they're public.
- return [NSError errorWithDomain:@"io.grpc" code:13 userInfo:info];
-}
-
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-implementations"
@implementation ProtoRPC {