|
|
|
@ -31,6 +31,7 @@ |
|
|
|
|
#import <Foundation/Foundation.h> |
|
|
|
|
|
|
|
|
|
#import "Conformance.pbobjc.h" |
|
|
|
|
#import "google/protobuf/TestMessagesProto2.pbobjc.h" |
|
|
|
|
#import "google/protobuf/TestMessagesProto3.pbobjc.h" |
|
|
|
|
|
|
|
|
|
static void Die(NSString *format, ...) __dead2; |
|
|
|
@ -63,7 +64,7 @@ static NSData *CheckedReadDataOfLength(NSFileHandle *handle, NSUInteger numBytes |
|
|
|
|
|
|
|
|
|
static ConformanceResponse *DoTest(ConformanceRequest *request) { |
|
|
|
|
ConformanceResponse *response = [ConformanceResponse message]; |
|
|
|
|
Proto3TestAllTypesProto3 *testMessage = nil; |
|
|
|
|
GPBMessage *testMessage = nil; |
|
|
|
|
|
|
|
|
|
switch (request.payloadOneOfCase) { |
|
|
|
|
case ConformanceRequest_Payload_OneOfCase_GPBUnsetOneOfCase: |
|
|
|
@ -71,20 +72,21 @@ static ConformanceResponse *DoTest(ConformanceRequest *request) { |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
case ConformanceRequest_Payload_OneOfCase_ProtobufPayload: { |
|
|
|
|
if ([request.messageType isEqualToString:@"protobuf_test_messages.proto3.TestAllTypesProto3"]) { |
|
|
|
|
Class msgClass = nil; |
|
|
|
|
if ([request.messageType isEqual:@"protobuf_test_messages.proto3.TestAllTypesProto3"]) { |
|
|
|
|
msgClass = [Proto3TestAllTypesProto3 class]; |
|
|
|
|
} else if ([request.messageType isEqual:@"protobuf_test_messages.proto2.TestAllTypesProto2"]) { |
|
|
|
|
msgClass = [TestAllTypesProto2 class]; |
|
|
|
|
} else { |
|
|
|
|
Die(@"Protobuf request doesn't have specific payload type"); |
|
|
|
|
} |
|
|
|
|
if (msgClass) { |
|
|
|
|
NSError *error = nil; |
|
|
|
|
testMessage = [Proto3TestAllTypesProto3 parseFromData:request.protobufPayload |
|
|
|
|
error:&error]; |
|
|
|
|
testMessage = [msgClass parseFromData:request.protobufPayload error:&error]; |
|
|
|
|
if (!testMessage) { |
|
|
|
|
response.parseError = |
|
|
|
|
[NSString stringWithFormat:@"Parse error: %@", error]; |
|
|
|
|
} |
|
|
|
|
} else if ([request.messageType isEqualToString:@"protobuf_test_messages.proto2.TestAllTypesProto2"]) { |
|
|
|
|
response.skipped = @"ObjC doesn't support proto2"; |
|
|
|
|
break; |
|
|
|
|
} else { |
|
|
|
|
Die(@"Protobuf request doesn't have specific payload type"); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|