|
|
|
@ -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 { |
|
|
|
|