Skip to content

Commit 385bf6d

Browse files
author
Mateusz Mackowiak
committed
Additional UnknownResponseObjectErrorCode if response object expected type is an unknown type
1 parent 75cc10f commit 385bf6d

6 files changed

Lines changed: 55 additions & 17 deletions

File tree

modules/swagger-codegen/src/main/resources/objc/ResponseDeserializer-body.mustache

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ NSInteger const {{classPrefix}}TypeMismatchErrorCode = 143553;
88

99
NSInteger const {{classPrefix}}EmptyValueOccurredErrorCode = 143509;
1010

11+
NSInteger const {{classPrefix}}UnknownResponseObjectErrorCode = 143528;
12+
13+
1114
@interface {{classPrefix}}ResponseDeserializer ()
1215

1316
@property (nonatomic, strong) NSNumberFormatter* numberFormatter;
@@ -70,33 +73,31 @@ NSInteger const {{classPrefix}}EmptyValueOccurredErrorCode = 143509;
7073
}
7174

7275
NSTextCheckingResult *match = nil;
73-
76+
NSRange range = NSMakeRange(0, [className length]);
7477
// list of models
75-
match = [self.arrayOfModelsPatExpression firstMatchInString:className options:0 range:NSMakeRange(0, [className length])];
78+
match = [self.arrayOfModelsPatExpression firstMatchInString:className options:0 range:range];
7679
if (match) {
7780
NSString *innerType = [className substringWithRange:[match rangeAtIndex:1]];
7881
return [self deserializeArrayValue:data innerType:innerType error:error];
7982
}
8083

8184
// list of primitives
82-
match = [self.arrayOfPrimitivesPatExpression firstMatchInString:className options:0 range:NSMakeRange(0, [className length])];
85+
match = [self.arrayOfPrimitivesPatExpression firstMatchInString:className options:0 range:range];
8386
if (match) {
8487
NSString *innerType = [className substringWithRange:[match rangeAtIndex:1]];
8588
return [self deserializeArrayValue:data innerType:innerType error:error];
8689
}
8790

8891
// map
89-
match = [self.dictPatExpression firstMatchInString:className options:0 range:NSMakeRange(0, [className length])];
92+
match = [self.dictPatExpression firstMatchInString:className options:0 range:range];
9093
if (match) {
9194
NSString *valueType = [className substringWithRange:[match rangeAtIndex:2]];
9295
return [self deserializeDictionaryValue:data valueType:valueType error:error];
9396
}
9497

95-
match = [self.dictModelsPatExpression firstMatchInString:className options:0 range:NSMakeRange(0, [className length])];
98+
match = [self.dictModelsPatExpression firstMatchInString:className options:0 range:range];
9699
if (match) {
97-
NSRange range =[match rangeAtIndex:2];
98-
range = NSMakeRange(range.location, [className length] - range.location -1);
99-
NSString *valueType = [className substringWithRange:range];
100+
NSString *valueType = [className substringWithRange:[match rangeAtIndex:2]];
100101
return [self deserializeDictionaryValue:data valueType:valueType error:error];
101102
}
102103

@@ -106,6 +107,9 @@ NSInteger const {{classPrefix}}EmptyValueOccurredErrorCode = 143509;
106107
return [(JSONModel *) [ModelClass alloc] initWithDictionary:data error:error];
107108
}
108109

110+
if(error) {
111+
*error = [self unknownResponseErrorWithExpectedType:className data:data];
112+
}
109113
return nil;
110114
}
111115

@@ -218,4 +222,10 @@ NSInteger const {{classPrefix}}EmptyValueOccurredErrorCode = 143509;
218222
return [NSError errorWithDomain:{{classPrefix}}DeserializationErrorDomainKey code:{{classPrefix}}EmptyValueOccurredErrorCode userInfo:userInfo];
219223
}
220224

225+
-(NSError *)unknownResponseErrorWithExpectedType:(NSString *)expected data:(id)data {
226+
NSString * message = [NSString stringWithFormat:NSLocalizedString(@"Unknown response expected type %@ [reponse: %@]",nil),expected,data];
227+
NSDictionary * userInfo = @{NSLocalizedDescriptionKey : message};
228+
return [NSError errorWithDomain:{{classPrefix}}DeserializationErrorDomainKey code:{{classPrefix}}UnknownResponseObjectErrorCode userInfo:userInfo];
229+
}
230+
221231
@end

modules/swagger-codegen/src/main/resources/objc/ResponseDeserializer-header.mustache

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ extern NSInteger const {{classPrefix}}TypeMismatchErrorCode;
2121
*/
2222
extern NSInteger const {{classPrefix}}EmptyValueOccurredErrorCode;
2323

24+
/**
25+
* Error code for unknown response
26+
*/
27+
extern NSInteger const {{classPrefix}}UnknownResponseObjectErrorCode;
28+
2429
@protocol {{classPrefix}}ResponseDeserializer <NSObject>
2530

2631
/**

samples/client/petstore/objc/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ This ObjC package is automatically generated by the [Swagger Codegen](https://gi
66

77
- API version: 1.0.0
88
- Package version:
9-
- Build date: 2016-05-06T10:30:53.676+02:00
9+
- Build date: 2016-05-06T11:35:18.146+02:00
1010
- Build package: class io.swagger.codegen.languages.ObjcClientCodegen
1111

1212
## Requirements

samples/client/petstore/objc/SwaggerClient/SWGResponseDeserializer.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ extern NSInteger const SWGTypeMismatchErrorCode;
2121
*/
2222
extern NSInteger const SWGEmptyValueOccurredErrorCode;
2323

24+
/**
25+
* Error code for unknown response
26+
*/
27+
extern NSInteger const SWGUnknownResponseObjectErrorCode;
28+
2429
@protocol SWGResponseDeserializer <NSObject>
2530

2631
/**

samples/client/petstore/objc/SwaggerClient/SWGResponseDeserializer.m

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88

99
NSInteger const SWGEmptyValueOccurredErrorCode = 143509;
1010

11+
NSInteger const SWGUnknownResponseObjectErrorCode = 143528;
12+
13+
1114
@interface SWGResponseDeserializer ()
1215

1316
@property (nonatomic, strong) NSNumberFormatter* numberFormatter;
@@ -70,33 +73,31 @@ - (id) deserialize:(id) data class:(NSString *) className error:(NSError **) err
7073
}
7174

7275
NSTextCheckingResult *match = nil;
73-
76+
NSRange range = NSMakeRange(0, [className length]);
7477
// list of models
75-
match = [self.arrayOfModelsPatExpression firstMatchInString:className options:0 range:NSMakeRange(0, [className length])];
78+
match = [self.arrayOfModelsPatExpression firstMatchInString:className options:0 range:range];
7679
if (match) {
7780
NSString *innerType = [className substringWithRange:[match rangeAtIndex:1]];
7881
return [self deserializeArrayValue:data innerType:innerType error:error];
7982
}
8083

8184
// list of primitives
82-
match = [self.arrayOfPrimitivesPatExpression firstMatchInString:className options:0 range:NSMakeRange(0, [className length])];
85+
match = [self.arrayOfPrimitivesPatExpression firstMatchInString:className options:0 range:range];
8386
if (match) {
8487
NSString *innerType = [className substringWithRange:[match rangeAtIndex:1]];
8588
return [self deserializeArrayValue:data innerType:innerType error:error];
8689
}
8790

8891
// map
89-
match = [self.dictPatExpression firstMatchInString:className options:0 range:NSMakeRange(0, [className length])];
92+
match = [self.dictPatExpression firstMatchInString:className options:0 range:range];
9093
if (match) {
9194
NSString *valueType = [className substringWithRange:[match rangeAtIndex:2]];
9295
return [self deserializeDictionaryValue:data valueType:valueType error:error];
9396
}
9497

95-
match = [self.dictModelsPatExpression firstMatchInString:className options:0 range:NSMakeRange(0, [className length])];
98+
match = [self.dictModelsPatExpression firstMatchInString:className options:0 range:range];
9699
if (match) {
97-
NSRange range =[match rangeAtIndex:2];
98-
range = NSMakeRange(range.location, [className length] - range.location -1);
99-
NSString *valueType = [className substringWithRange:range];
100+
NSString *valueType = [className substringWithRange:[match rangeAtIndex:2]];
100101
return [self deserializeDictionaryValue:data valueType:valueType error:error];
101102
}
102103

@@ -106,6 +107,9 @@ - (id) deserialize:(id) data class:(NSString *) className error:(NSError **) err
106107
return [(JSONModel *) [ModelClass alloc] initWithDictionary:data error:error];
107108
}
108109

110+
if(error) {
111+
*error = [self unknownResponseErrorWithExpectedType:className data:data];
112+
}
109113
return nil;
110114
}
111115

@@ -218,4 +222,10 @@ -(NSError *)emptyValueOccurredError {
218222
return [NSError errorWithDomain:SWGDeserializationErrorDomainKey code:SWGEmptyValueOccurredErrorCode userInfo:userInfo];
219223
}
220224

225+
-(NSError *)unknownResponseErrorWithExpectedType:(NSString *)expected data:(id)data {
226+
NSString * message = [NSString stringWithFormat:NSLocalizedString(@"Unknown response expected type %@ [reponse: %@]",nil),expected,data];
227+
NSDictionary * userInfo = @{NSLocalizedDescriptionKey : message};
228+
return [NSError errorWithDomain:SWGDeserializationErrorDomainKey code:SWGUnknownResponseObjectErrorCode userInfo:userInfo];
229+
}
230+
221231
@end

samples/client/petstore/objc/SwaggerClientTests/Tests/DeserializationTest.m

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,14 @@ - (void)testDeserializeDateTime {
6161
XCTAssertEqualWithAccuracy([dateTime timeIntervalSinceReferenceDate], [deserializedDateTime timeIntervalSinceReferenceDate], 0.001);
6262
}
6363

64+
- (void)testDeserializeUnknownObject {
65+
NSString *data = @"random string";
66+
NSError* error;
67+
NSNumber *result = [apiClient.responseDeserializer deserialize:data class:@"DeserializationTest*" error:&error];
68+
XCTAssertNotNil(error);
69+
XCTAssertNil(result);
70+
}
71+
6472
- (void)testDeserializeObject {
6573
NSNumber *data = @1;
6674
NSError* error;

0 commit comments

Comments
 (0)