diff --git a/modules/swagger-codegen/src/main/resources/swift3/AlamofireImplementations.mustache b/modules/swagger-codegen/src/main/resources/swift3/AlamofireImplementations.mustache index 69a80df05d2..8fe9e375677 100644 --- a/modules/swagger-codegen/src/main/resources/swift3/AlamofireImplementations.mustache +++ b/modules/swagger-codegen/src/main/resources/swift3/AlamofireImplementations.mustache @@ -197,7 +197,7 @@ open class AlamofireRequestBuilder: RequestBuilder { return } if let json: Any = response.result.value { - let decoded = Decoders.decode(clazz: T.self, source: json as AnyObject) + let decoded = Decoders.decode(clazz: T.self, source: json as AnyObject, instance: nil) switch decoded { case let .success(object): completion(Response(response: response.response!, body: object), nil) case let .failure(error): completion(nil, ErrorResponse.DecodeError(response: response.data, decodeError: error)) diff --git a/modules/swagger-codegen/src/main/resources/swift3/Models.mustache b/modules/swagger-codegen/src/main/resources/swift3/Models.mustache index 82792e248aa..b2c472d9015 100644 --- a/modules/swagger-codegen/src/main/resources/swift3/Models.mustache +++ b/modules/swagger-codegen/src/main/resources/swift3/Models.mustache @@ -60,17 +60,16 @@ public enum DecodeError { private var once = Int() class Decoders { - static fileprivate var decoders = Dictionary AnyObject)>() + static fileprivate var decoders = Dictionary AnyObject)>() - - static func addDecoder(clazz: T.Type, decoder: @escaping ((AnyObject) -> Decoded)) { + static func addDecoder(clazz: T.Type, decoder: @escaping ((AnyObject, AnyObject?) -> Decoded)) { let key = "\(T.self)" - decoders[key] = { decoder($0) as AnyObject } + decoders[key] = { decoder($0, $1) as AnyObject } } static func decode(clazz: T.Type, discriminator: String, source: AnyObject) -> Decoded { let key = discriminator - if let decoder = decoders[key], let value = decoder(source) as? Decoded { + if let decoder = decoders[key], let value = decoder(source, nil) as? Decoded { return value } else { return .failure(.typeMismatch(expected: String(describing: clazz), actual: String(describing: source))) @@ -81,7 +80,7 @@ class Decoders { if let sourceArray = source as? [AnyObject] { var values = [T]() for sourceValue in sourceArray { - switch Decoders.decode(clazz: T.self, source: sourceValue) { + switch Decoders.decode(clazz: T.self, source: sourceValue, instance: nil) { case let .success(value): values.append(value) case let .failure(error): @@ -98,7 +97,7 @@ class Decoders { if let sourceDictionary = source as? [Key: AnyObject] { var dictionary = [Key:T]() for (key, value) in sourceDictionary { - switch Decoders.decode(clazz: T.self, source: value) { + switch Decoders.decode(clazz: T.self, source: value, instance: nil) { case let .success(value): dictionary[key] = value case let .failure(error): @@ -124,7 +123,7 @@ class Decoders { } } - static func decode(clazz: T.Type, source: AnyObject) -> Decoded { + static func decode(clazz: T.Type, source: AnyObject, instance: AnyObject?) -> Decoded { initialize() if let value = source.int32Value as? T, source is NSNumber, T.self is Int32.Type { return .success(value) @@ -143,7 +142,7 @@ class Decoders { } let key = "\(T.self)" - if let decoder = decoders[key], let value = decoder(source) as? Decoded { + if let decoder = decoders[key], let value = decoder(source, instance) as? Decoded { return value } else { return .failure(.typeMismatch(expected: String(describing: clazz), actual: String(describing: source))) @@ -157,7 +156,7 @@ class Decoders { static func decodeOptional(clazz: T.Type, source: AnyObject?) -> Decoded { if let source = source, !(source is NSNull) { - switch Decoders.decode(clazz: clazz, source: source) { + switch Decoders.decode(clazz: clazz, source: source, instance: nil) { case let .success(value): return .success(value) case let .failure(error): return .failure(error) } @@ -170,7 +169,7 @@ class Decoders { if let source = source as? [AnyObject] { var values = [T]() for sourceValue in source { - switch Decoders.decode(clazz: T.self, source: sourceValue) { + switch Decoders.decode(clazz: T.self, source: sourceValue, instance: nil) { case let .success(value): values.append(value) case let .failure(error): return .failure(error) } @@ -185,7 +184,7 @@ class Decoders { if let sourceDictionary = source as? [Key: AnyObject] { var dictionary = [Key:T]() for (key, value) in sourceDictionary { - switch Decoders.decode(clazz: T.self, source: value) { + switch Decoders.decode(clazz: T.self, source: value, instance: nil) { case let .success(value): dictionary[key] = value case let .failure(error): return .failure(error) } @@ -223,7 +222,7 @@ class Decoders { return formatter } // Decoder for Date - Decoders.addDecoder(clazz: Date.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Date.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceString = source as? String { for formatter in formatters { if let date = formatter.date(from: sourceString) { @@ -243,7 +242,7 @@ class Decoders { } // Decoder for ISOFullDate - Decoders.addDecoder(clazz: ISOFullDate.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: ISOFullDate.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let string = source as? String, let isoDate = ISOFullDate.from(string: string) { return .success(isoDate) @@ -254,14 +253,14 @@ class Decoders { {{^isArrayModel}} // Decoder for [{{{classname}}}] - Decoders.addDecoder(clazz: [{{{classname}}}].self) { (source: AnyObject) -> Decoded<[{{{classname}}}]> in - return Decoders.decode(clazz: [{{{classname}}}].self, source: source) + Decoders.addDecoder(clazz: [{{{classname}}}].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[{{{classname}}}]> in + return Decoders.decode(clazz: [{{{classname}}}].self, source: source, instance: instance) } // Decoder for {{{classname}}} - Decoders.addDecoder(clazz: {{{classname}}}.self) { (source: AnyObject) -> Decoded<{{{classname}}}> in + Decoders.addDecoder(clazz: {{{classname}}}.self) { (source: AnyObject, instance: AnyObject?) -> Decoded<{{{classname}}}> in {{#isEnum}} //TODO: I don't think we need this anymore - return Decoders.decode(clazz: {{{classname}}}.self, source: source) + return Decoders.decode(clazz: {{{classname}}}.self, source: source, instance: instance) {{/isEnum}} {{^isEnum}} {{#allVars.isEmpty}} @@ -275,7 +274,7 @@ class Decoders { if let sourceDictionary = source as? [AnyHashable: Any] { {{#discriminator}} // Check discriminator to support inheritance - if let discriminator = sourceDictionary["{{discriminator}}"] as? String, discriminator != "{{classname}}"{ + if let discriminator = sourceDictionary["{{discriminator}}"] as? String, instance == nil && discriminator != "{{classname}}"{ return Decoders.decode(clazz: {{classname}}.self, discriminator: discriminator, source: source) } {{/discriminator}} @@ -289,7 +288,7 @@ class Decoders { return .failure(.typeMismatch(expected: "{{classname}}", actual: "\({{name}}Source)")) } {{/requiredVars}} - let instance = {{classname}}({{#requiredVars}}{{^-first}}, {{/-first}}{{name}}: {{name}}{{/requiredVars}}) + let result = {{classname}}({{#requiredVars}}{{^-first}}, {{/-first}}{{name}}: {{name}}{{/requiredVars}}) {{#optionalVars}} switch Decoders.decodeOptional(clazz: {{#isEnum}}{{^isListContainer}}{{classname}}.{{enumName}}.self{{/isListContainer}}{{#isListContainer}}Array<{{classname}}.{{enumName}}>.self{{/isListContainer}}{{/isEnum}}{{^isEnum}}{{{datatype}}}.self{{/isEnum}}, source: sourceDictionary["{{baseName}}"] as AnyObject?) { case let .success(value): instance.{{name}} = value @@ -298,16 +297,22 @@ class Decoders { {{/optionalVars}} {{/unwrapRequired}} {{^unwrapRequired}} - let instance = {{classname}}(){{#allVars}} + let result = instance == nil ? {{classname}}() : instance as! {{classname}} + {{#parent}} + if decoders["\({{parent}}.self)"] != nil { + _ = Decoders.decode(clazz: {{parent}}.self, source: source, instance: result) + } + {{/parent}} + {{#allVars}} switch Decoders.decodeOptional(clazz: {{#isEnum}}{{^isListContainer}}{{classname}}.{{enumName}}.self{{/isListContainer}}{{#isListContainer}}Array<{{classname}}.{{enumName}}>.self{{/isListContainer}}{{/isEnum}}{{^isEnum}}{{{datatype}}}.self{{/isEnum}}, source: sourceDictionary["{{baseName}}"] as AnyObject?) { {{#isEnum}}{{#isMapContainer}}/*{{/isMapContainer}}{{/isEnum}} - case let .success(value): instance.{{name}} = value + case let .success(value): result.{{name}} = value case let .failure(error): return .failure(error) {{#isEnum}}{{#isMapContainer}}*/ default: break //TODO: handle enum map scenario{{/isMapContainer}}{{/isEnum}} } {{/allVars}} {{/unwrapRequired}} - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "{{classname}}", actual: "\(source)")) } diff --git a/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/APIs/FakeAPI.swift b/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/APIs/FakeAPI.swift index dbe5b5a379e..5a329e17728 100644 --- a/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/APIs/FakeAPI.swift @@ -27,9 +27,9 @@ open class FakeAPI: APIBase { To test \"client\" model - PATCH /fake - To test \"client\" model - - examples: [{contentType=application/json, example={ + - examples: [{example={ "client" : "aeiou" -}}] +}, contentType=application/json}] - parameter body: (body) client model diff --git a/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/APIs/Fake_classname_tags123API.swift b/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/APIs/Fake_classname_tags123API.swift index ba69fb2a513..b1a489cdc53 100644 --- a/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/APIs/Fake_classname_tags123API.swift +++ b/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/APIs/Fake_classname_tags123API.swift @@ -26,9 +26,9 @@ open class Fake_classname_tags123API: APIBase { /** To test class name in snake case - PATCH /fake_classname_test - - examples: [{contentType=application/json, example={ + - examples: [{example={ "client" : "aeiou" -}}] +}, contentType=application/json}] - parameter body: (body) client model diff --git a/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift b/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift index 091e0d45664..a480e7edbc2 100644 --- a/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift +++ b/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift @@ -122,7 +122,7 @@ open class PetAPI: APIBase { - OAuth: - type: oauth2 - name: petstore_auth - - examples: [{contentType=application/xml, example= + - examples: [{example= 123456789 doggie @@ -131,21 +131,21 @@ open class PetAPI: APIBase { aeiou -}, {contentType=application/json, example=[ { - "photoUrls" : [ "aeiou" ], - "name" : "doggie", +, contentType=application/xml}, {example=[ { + "tags" : [ { + "id" : 1, + "name" : "aeiou" + } ], "id" : 0, "category" : { - "name" : "aeiou", - "id" : 6 + "id" : 6, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 1 - } ], - "status" : "available" -} ]}] - - examples: [{contentType=application/xml, example= + "status" : "available", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +} ], contentType=application/json}] + - examples: [{example= 123456789 doggie @@ -154,20 +154,20 @@ open class PetAPI: APIBase { aeiou -}, {contentType=application/json, example=[ { - "photoUrls" : [ "aeiou" ], - "name" : "doggie", +, contentType=application/xml}, {example=[ { + "tags" : [ { + "id" : 1, + "name" : "aeiou" + } ], "id" : 0, "category" : { - "name" : "aeiou", - "id" : 6 + "id" : 6, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 1 - } ], - "status" : "available" -} ]}] + "status" : "available", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +} ], contentType=application/json}] - parameter status: (query) Status values that need to be considered for filter @@ -209,7 +209,7 @@ open class PetAPI: APIBase { - OAuth: - type: oauth2 - name: petstore_auth - - examples: [{contentType=application/xml, example= + - examples: [{example= 123456789 doggie @@ -218,21 +218,21 @@ open class PetAPI: APIBase { aeiou -}, {contentType=application/json, example=[ { - "photoUrls" : [ "aeiou" ], - "name" : "doggie", +, contentType=application/xml}, {example=[ { + "tags" : [ { + "id" : 1, + "name" : "aeiou" + } ], "id" : 0, "category" : { - "name" : "aeiou", - "id" : 6 + "id" : 6, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 1 - } ], - "status" : "available" -} ]}] - - examples: [{contentType=application/xml, example= + "status" : "available", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +} ], contentType=application/json}] + - examples: [{example= 123456789 doggie @@ -241,20 +241,20 @@ open class PetAPI: APIBase { aeiou -}, {contentType=application/json, example=[ { - "photoUrls" : [ "aeiou" ], - "name" : "doggie", +, contentType=application/xml}, {example=[ { + "tags" : [ { + "id" : 1, + "name" : "aeiou" + } ], "id" : 0, "category" : { - "name" : "aeiou", - "id" : 6 + "id" : 6, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 1 - } ], - "status" : "available" -} ]}] + "status" : "available", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +} ], contentType=application/json}] - parameter tags: (query) Tags to filter by @@ -296,7 +296,7 @@ open class PetAPI: APIBase { - API Key: - type: apiKey api_key - name: api_key - - examples: [{contentType=application/xml, example= + - examples: [{example= 123456789 doggie @@ -305,21 +305,21 @@ open class PetAPI: APIBase { aeiou -}, {contentType=application/json, example={ - "photoUrls" : [ "aeiou" ], - "name" : "doggie", +, contentType=application/xml}, {example={ + "tags" : [ { + "id" : 1, + "name" : "aeiou" + } ], "id" : 0, "category" : { - "name" : "aeiou", - "id" : 6 + "id" : 6, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 1 - } ], - "status" : "available" -}}] - - examples: [{contentType=application/xml, example= + "status" : "available", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +}, contentType=application/json}] + - examples: [{example= 123456789 doggie @@ -328,20 +328,20 @@ open class PetAPI: APIBase { aeiou -}, {contentType=application/json, example={ - "photoUrls" : [ "aeiou" ], - "name" : "doggie", +, contentType=application/xml}, {example={ + "tags" : [ { + "id" : 1, + "name" : "aeiou" + } ], "id" : 0, "category" : { - "name" : "aeiou", - "id" : 6 + "id" : 6, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 1 - } ], - "status" : "available" -}}] + "status" : "available", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +}, contentType=application/json}] - parameter petId: (path) ID of pet to return @@ -470,11 +470,11 @@ open class PetAPI: APIBase { - OAuth: - type: oauth2 - name: petstore_auth - - examples: [{contentType=application/json, example={ + - examples: [{example={ + "message" : "aeiou", "code" : 0, - "type" : "aeiou", - "message" : "aeiou" -}}] + "type" : "aeiou" +}, contentType=application/json}] - parameter petId: (path) ID of pet to update - parameter additionalMetadata: (form) Additional data to pass to server (optional) diff --git a/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift b/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift index 91734ecbb02..010fa3175a5 100644 --- a/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift @@ -65,9 +65,9 @@ open class StoreAPI: APIBase { - API Key: - type: apiKey api_key - name: api_key - - examples: [{contentType=application/json, example={ + - examples: [{example={ "key" : 0 -}}] +}, contentType=application/json}] - returns: RequestBuilder<[String:Int32]> */ @@ -101,36 +101,36 @@ open class StoreAPI: APIBase { Find purchase order by ID - GET /store/order/{order_id} - For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - - examples: [{contentType=application/xml, example= + - examples: [{example= 123456789 123456789 123 2000-01-23T04:56:07.000Z aeiou true -}, {contentType=application/json, example={ - "petId" : 6, - "quantity" : 1, +, contentType=application/xml}, {example={ "id" : 0, - "shipDate" : "2000-01-23T04:56:07.000+00:00", + "petId" : 6, "complete" : false, - "status" : "placed" -}}] - - examples: [{contentType=application/xml, example= + "status" : "placed", + "quantity" : 1, + "shipDate" : "2000-01-23T04:56:07.000+00:00" +}, contentType=application/json}] + - examples: [{example= 123456789 123456789 123 2000-01-23T04:56:07.000Z aeiou true -}, {contentType=application/json, example={ - "petId" : 6, - "quantity" : 1, +, contentType=application/xml}, {example={ "id" : 0, - "shipDate" : "2000-01-23T04:56:07.000+00:00", + "petId" : 6, "complete" : false, - "status" : "placed" -}}] + "status" : "placed", + "quantity" : 1, + "shipDate" : "2000-01-23T04:56:07.000+00:00" +}, contentType=application/json}] - parameter orderId: (path) ID of pet that needs to be fetched @@ -167,36 +167,36 @@ open class StoreAPI: APIBase { Place an order for a pet - POST /store/order - - - examples: [{contentType=application/xml, example= + - examples: [{example= 123456789 123456789 123 2000-01-23T04:56:07.000Z aeiou true -}, {contentType=application/json, example={ - "petId" : 6, - "quantity" : 1, +, contentType=application/xml}, {example={ "id" : 0, - "shipDate" : "2000-01-23T04:56:07.000+00:00", + "petId" : 6, "complete" : false, - "status" : "placed" -}}] - - examples: [{contentType=application/xml, example= + "status" : "placed", + "quantity" : 1, + "shipDate" : "2000-01-23T04:56:07.000+00:00" +}, contentType=application/json}] + - examples: [{example= 123456789 123456789 123 2000-01-23T04:56:07.000Z aeiou true -}, {contentType=application/json, example={ - "petId" : 6, - "quantity" : 1, +, contentType=application/xml}, {example={ "id" : 0, - "shipDate" : "2000-01-23T04:56:07.000+00:00", + "petId" : 6, "complete" : false, - "status" : "placed" -}}] + "status" : "placed", + "quantity" : 1, + "shipDate" : "2000-01-23T04:56:07.000+00:00" +}, contentType=application/json}] - parameter body: (body) order placed for purchasing the pet diff --git a/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift b/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift index c21366cce7d..7822056b60e 100644 --- a/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift +++ b/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift @@ -168,7 +168,7 @@ open class UserAPI: APIBase { Get user by user name - GET /user/{username} - - - examples: [{contentType=application/xml, example= + - examples: [{example= 123456789 aeiou aeiou @@ -177,17 +177,17 @@ open class UserAPI: APIBase { aeiou aeiou 123 -}, {contentType=application/json, example={ - "firstName" : "aeiou", - "lastName" : "aeiou", - "password" : "aeiou", - "userStatus" : 6, - "phone" : "aeiou", +, contentType=application/xml}, {example={ "id" : 0, + "lastName" : "aeiou", + "phone" : "aeiou", + "username" : "aeiou", "email" : "aeiou", - "username" : "aeiou" -}}] - - examples: [{contentType=application/xml, example= + "userStatus" : 6, + "firstName" : "aeiou", + "password" : "aeiou" +}, contentType=application/json}] + - examples: [{example= 123456789 aeiou aeiou @@ -196,16 +196,16 @@ open class UserAPI: APIBase { aeiou aeiou 123 -}, {contentType=application/json, example={ - "firstName" : "aeiou", - "lastName" : "aeiou", - "password" : "aeiou", - "userStatus" : 6, - "phone" : "aeiou", +, contentType=application/xml}, {example={ "id" : 0, + "lastName" : "aeiou", + "phone" : "aeiou", + "username" : "aeiou", "email" : "aeiou", - "username" : "aeiou" -}}] + "userStatus" : 6, + "firstName" : "aeiou", + "password" : "aeiou" +}, contentType=application/json}] - parameter username: (path) The name that needs to be fetched. Use user1 for testing. @@ -245,8 +245,8 @@ open class UserAPI: APIBase { - - responseHeaders: [X-Rate-Limit(Int32), X-Expires-After(Date)] - responseHeaders: [X-Rate-Limit(Int32), X-Expires-After(Date)] - - examples: [{contentType=application/xml, example=aeiou}, {contentType=application/json, example="aeiou"}] - - examples: [{contentType=application/xml, example=aeiou}, {contentType=application/json, example="aeiou"}] + - examples: [{example=aeiou, contentType=application/xml}, {example="aeiou", contentType=application/json}] + - examples: [{example=aeiou, contentType=application/xml}, {example="aeiou", contentType=application/json}] - parameter username: (query) The user name for login - parameter password: (query) The password for login in clear text diff --git a/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/AlamofireImplementations.swift b/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/AlamofireImplementations.swift index 69a80df05d2..8fe9e375677 100644 --- a/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/AlamofireImplementations.swift +++ b/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/AlamofireImplementations.swift @@ -197,7 +197,7 @@ open class AlamofireRequestBuilder: RequestBuilder { return } if let json: Any = response.result.value { - let decoded = Decoders.decode(clazz: T.self, source: json as AnyObject) + let decoded = Decoders.decode(clazz: T.self, source: json as AnyObject, instance: nil) switch decoded { case let .success(object): completion(Response(response: response.response!, body: object), nil) case let .failure(error): completion(nil, ErrorResponse.DecodeError(response: response.data, decodeError: error)) diff --git a/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/Models.swift b/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/Models.swift index d7c5b457005..2dd4a72e0c4 100644 --- a/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/Models.swift +++ b/samples/client/petstore/swift3/default/PetstoreClient/Classes/Swaggers/Models.swift @@ -60,17 +60,16 @@ public enum DecodeError { private var once = Int() class Decoders { - static fileprivate var decoders = Dictionary AnyObject)>() + static fileprivate var decoders = Dictionary AnyObject)>() - - static func addDecoder(clazz: T.Type, decoder: @escaping ((AnyObject) -> Decoded)) { + static func addDecoder(clazz: T.Type, decoder: @escaping ((AnyObject, AnyObject?) -> Decoded)) { let key = "\(T.self)" - decoders[key] = { decoder($0) as AnyObject } + decoders[key] = { decoder($0, $1) as AnyObject } } static func decode(clazz: T.Type, discriminator: String, source: AnyObject) -> Decoded { let key = discriminator - if let decoder = decoders[key], let value = decoder(source) as? Decoded { + if let decoder = decoders[key], let value = decoder(source, nil) as? Decoded { return value } else { return .failure(.typeMismatch(expected: String(describing: clazz), actual: String(describing: source))) @@ -81,7 +80,7 @@ class Decoders { if let sourceArray = source as? [AnyObject] { var values = [T]() for sourceValue in sourceArray { - switch Decoders.decode(clazz: T.self, source: sourceValue) { + switch Decoders.decode(clazz: T.self, source: sourceValue, instance: nil) { case let .success(value): values.append(value) case let .failure(error): @@ -98,7 +97,7 @@ class Decoders { if let sourceDictionary = source as? [Key: AnyObject] { var dictionary = [Key:T]() for (key, value) in sourceDictionary { - switch Decoders.decode(clazz: T.self, source: value) { + switch Decoders.decode(clazz: T.self, source: value, instance: nil) { case let .success(value): dictionary[key] = value case let .failure(error): @@ -124,7 +123,7 @@ class Decoders { } } - static func decode(clazz: T.Type, source: AnyObject) -> Decoded { + static func decode(clazz: T.Type, source: AnyObject, instance: AnyObject?) -> Decoded { initialize() if let value = source.int32Value as? T, source is NSNumber, T.self is Int32.Type { return .success(value) @@ -143,7 +142,7 @@ class Decoders { } let key = "\(T.self)" - if let decoder = decoders[key], let value = decoder(source) as? Decoded { + if let decoder = decoders[key], let value = decoder(source, instance) as? Decoded { return value } else { return .failure(.typeMismatch(expected: String(describing: clazz), actual: String(describing: source))) @@ -157,7 +156,7 @@ class Decoders { static func decodeOptional(clazz: T.Type, source: AnyObject?) -> Decoded { if let source = source, !(source is NSNull) { - switch Decoders.decode(clazz: clazz, source: source) { + switch Decoders.decode(clazz: clazz, source: source, instance: nil) { case let .success(value): return .success(value) case let .failure(error): return .failure(error) } @@ -170,7 +169,7 @@ class Decoders { if let source = source as? [AnyObject] { var values = [T]() for sourceValue in source { - switch Decoders.decode(clazz: T.self, source: sourceValue) { + switch Decoders.decode(clazz: T.self, source: sourceValue, instance: nil) { case let .success(value): values.append(value) case let .failure(error): return .failure(error) } @@ -185,7 +184,7 @@ class Decoders { if let sourceDictionary = source as? [Key: AnyObject] { var dictionary = [Key:T]() for (key, value) in sourceDictionary { - switch Decoders.decode(clazz: T.self, source: value) { + switch Decoders.decode(clazz: T.self, source: value, instance: nil) { case let .success(value): dictionary[key] = value case let .failure(error): return .failure(error) } @@ -223,7 +222,7 @@ class Decoders { return formatter } // Decoder for Date - Decoders.addDecoder(clazz: Date.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Date.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceString = source as? String { for formatter in formatters { if let date = formatter.date(from: sourceString) { @@ -243,7 +242,7 @@ class Decoders { } // Decoder for ISOFullDate - Decoders.addDecoder(clazz: ISOFullDate.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: ISOFullDate.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let string = source as? String, let isoDate = ISOFullDate.from(string: string) { return .success(isoDate) @@ -253,28 +252,27 @@ class Decoders { } // Decoder for [AdditionalPropertiesClass] - Decoders.addDecoder(clazz: [AdditionalPropertiesClass].self) { (source: AnyObject) -> Decoded<[AdditionalPropertiesClass]> in - return Decoders.decode(clazz: [AdditionalPropertiesClass].self, source: source) + Decoders.addDecoder(clazz: [AdditionalPropertiesClass].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[AdditionalPropertiesClass]> in + return Decoders.decode(clazz: [AdditionalPropertiesClass].self, source: source, instance: instance) } // Decoder for AdditionalPropertiesClass - Decoders.addDecoder(clazz: AdditionalPropertiesClass.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: AdditionalPropertiesClass.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = AdditionalPropertiesClass() + let result = instance == nil ? AdditionalPropertiesClass() : instance as! AdditionalPropertiesClass switch Decoders.decodeOptional(clazz: [String:String].self, source: sourceDictionary["map_property"] as AnyObject?) { - case let .success(value): instance.mapProperty = value + case let .success(value): result.mapProperty = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: [String:[String:String]].self, source: sourceDictionary["map_of_map_property"] as AnyObject?) { - case let .success(value): instance.mapOfMapProperty = value + case let .success(value): result.mapOfMapProperty = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "AdditionalPropertiesClass", actual: "\(source)")) } @@ -282,32 +280,31 @@ class Decoders { // Decoder for [Animal] - Decoders.addDecoder(clazz: [Animal].self) { (source: AnyObject) -> Decoded<[Animal]> in - return Decoders.decode(clazz: [Animal].self, source: source) + Decoders.addDecoder(clazz: [Animal].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Animal]> in + return Decoders.decode(clazz: [Animal].self, source: source, instance: instance) } // Decoder for Animal - Decoders.addDecoder(clazz: Animal.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Animal.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { // Check discriminator to support inheritance - if let discriminator = sourceDictionary["className"] as? String, discriminator != "Animal"{ + if let discriminator = sourceDictionary["className"] as? String, instance == nil && discriminator != "Animal"{ return Decoders.decode(clazz: Animal.self, discriminator: discriminator, source: source) } - let instance = Animal() + let result = instance == nil ? Animal() : instance as! Animal switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["className"] as AnyObject?) { - case let .success(value): instance.className = value + case let .success(value): result.className = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["color"] as AnyObject?) { - case let .success(value): instance.color = value + case let .success(value): result.color = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Animal", actual: "\(source)")) } @@ -318,35 +315,33 @@ class Decoders { // Decoder for [ApiResponse] - Decoders.addDecoder(clazz: [ApiResponse].self) { (source: AnyObject) -> Decoded<[ApiResponse]> in - return Decoders.decode(clazz: [ApiResponse].self, source: source) + Decoders.addDecoder(clazz: [ApiResponse].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[ApiResponse]> in + return Decoders.decode(clazz: [ApiResponse].self, source: source, instance: instance) } // Decoder for ApiResponse - Decoders.addDecoder(clazz: ApiResponse.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: ApiResponse.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = ApiResponse() + let result = instance == nil ? ApiResponse() : instance as! ApiResponse switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["code"] as AnyObject?) { - case let .success(value): instance.code = value + case let .success(value): result.code = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["type"] as AnyObject?) { - case let .success(value): instance.type = value + case let .success(value): result.type = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["message"] as AnyObject?) { - case let .success(value): instance.message = value + case let .success(value): result.message = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "ApiResponse", actual: "\(source)")) } @@ -354,21 +349,21 @@ class Decoders { // Decoder for [ArrayOfArrayOfNumberOnly] - Decoders.addDecoder(clazz: [ArrayOfArrayOfNumberOnly].self) { (source: AnyObject) -> Decoded<[ArrayOfArrayOfNumberOnly]> in - return Decoders.decode(clazz: [ArrayOfArrayOfNumberOnly].self, source: source) + Decoders.addDecoder(clazz: [ArrayOfArrayOfNumberOnly].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[ArrayOfArrayOfNumberOnly]> in + return Decoders.decode(clazz: [ArrayOfArrayOfNumberOnly].self, source: source, instance: instance) } // Decoder for ArrayOfArrayOfNumberOnly - Decoders.addDecoder(clazz: ArrayOfArrayOfNumberOnly.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: ArrayOfArrayOfNumberOnly.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = ArrayOfArrayOfNumberOnly() + let result = instance == nil ? ArrayOfArrayOfNumberOnly() : instance as! ArrayOfArrayOfNumberOnly switch Decoders.decodeOptional(clazz: [[Double]].self, source: sourceDictionary["ArrayArrayNumber"] as AnyObject?) { - case let .success(value): instance.arrayArrayNumber = value + case let .success(value): result.arrayArrayNumber = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "ArrayOfArrayOfNumberOnly", actual: "\(source)")) } @@ -376,21 +371,21 @@ class Decoders { // Decoder for [ArrayOfNumberOnly] - Decoders.addDecoder(clazz: [ArrayOfNumberOnly].self) { (source: AnyObject) -> Decoded<[ArrayOfNumberOnly]> in - return Decoders.decode(clazz: [ArrayOfNumberOnly].self, source: source) + Decoders.addDecoder(clazz: [ArrayOfNumberOnly].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[ArrayOfNumberOnly]> in + return Decoders.decode(clazz: [ArrayOfNumberOnly].self, source: source, instance: instance) } // Decoder for ArrayOfNumberOnly - Decoders.addDecoder(clazz: ArrayOfNumberOnly.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: ArrayOfNumberOnly.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = ArrayOfNumberOnly() + let result = instance == nil ? ArrayOfNumberOnly() : instance as! ArrayOfNumberOnly switch Decoders.decodeOptional(clazz: [Double].self, source: sourceDictionary["ArrayNumber"] as AnyObject?) { - case let .success(value): instance.arrayNumber = value + case let .success(value): result.arrayNumber = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "ArrayOfNumberOnly", actual: "\(source)")) } @@ -398,35 +393,33 @@ class Decoders { // Decoder for [ArrayTest] - Decoders.addDecoder(clazz: [ArrayTest].self) { (source: AnyObject) -> Decoded<[ArrayTest]> in - return Decoders.decode(clazz: [ArrayTest].self, source: source) + Decoders.addDecoder(clazz: [ArrayTest].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[ArrayTest]> in + return Decoders.decode(clazz: [ArrayTest].self, source: source, instance: instance) } // Decoder for ArrayTest - Decoders.addDecoder(clazz: ArrayTest.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: ArrayTest.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = ArrayTest() + let result = instance == nil ? ArrayTest() : instance as! ArrayTest switch Decoders.decodeOptional(clazz: [String].self, source: sourceDictionary["array_of_string"] as AnyObject?) { - case let .success(value): instance.arrayOfString = value + case let .success(value): result.arrayOfString = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: [[Int64]].self, source: sourceDictionary["array_array_of_integer"] as AnyObject?) { - case let .success(value): instance.arrayArrayOfInteger = value + case let .success(value): result.arrayArrayOfInteger = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: [[ReadOnlyFirst]].self, source: sourceDictionary["array_array_of_model"] as AnyObject?) { - case let .success(value): instance.arrayArrayOfModel = value + case let .success(value): result.arrayArrayOfModel = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "ArrayTest", actual: "\(source)")) } @@ -434,56 +427,51 @@ class Decoders { // Decoder for [Capitalization] - Decoders.addDecoder(clazz: [Capitalization].self) { (source: AnyObject) -> Decoded<[Capitalization]> in - return Decoders.decode(clazz: [Capitalization].self, source: source) + Decoders.addDecoder(clazz: [Capitalization].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Capitalization]> in + return Decoders.decode(clazz: [Capitalization].self, source: source, instance: instance) } // Decoder for Capitalization - Decoders.addDecoder(clazz: Capitalization.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Capitalization.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Capitalization() + let result = instance == nil ? Capitalization() : instance as! Capitalization switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["smallCamel"] as AnyObject?) { - case let .success(value): instance.smallCamel = value + case let .success(value): result.smallCamel = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["CapitalCamel"] as AnyObject?) { - case let .success(value): instance.capitalCamel = value + case let .success(value): result.capitalCamel = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["small_Snake"] as AnyObject?) { - case let .success(value): instance.smallSnake = value + case let .success(value): result.smallSnake = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["Capital_Snake"] as AnyObject?) { - case let .success(value): instance.capitalSnake = value + case let .success(value): result.capitalSnake = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["SCA_ETH_Flow_Points"] as AnyObject?) { - case let .success(value): instance.sCAETHFlowPoints = value + case let .success(value): result.sCAETHFlowPoints = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["ATT_NAME"] as AnyObject?) { - case let .success(value): instance.ATT_NAME = value + case let .success(value): result.ATT_NAME = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Capitalization", actual: "\(source)")) } @@ -491,35 +479,36 @@ class Decoders { // Decoder for [Cat] - Decoders.addDecoder(clazz: [Cat].self) { (source: AnyObject) -> Decoded<[Cat]> in - return Decoders.decode(clazz: [Cat].self, source: source) + Decoders.addDecoder(clazz: [Cat].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Cat]> in + return Decoders.decode(clazz: [Cat].self, source: source, instance: instance) } // Decoder for Cat - Decoders.addDecoder(clazz: Cat.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Cat.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Cat() + let result = instance == nil ? Cat() : instance as! Cat + if decoders["\(Animal.self)"] != nil { + _ = Decoders.decode(clazz: Animal.self, source: source, instance: result) + } switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["className"] as AnyObject?) { - case let .success(value): instance.className = value + case let .success(value): result.className = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["color"] as AnyObject?) { - case let .success(value): instance.color = value + case let .success(value): result.color = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Bool.self, source: sourceDictionary["declawed"] as AnyObject?) { - case let .success(value): instance.declawed = value + case let .success(value): result.declawed = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Cat", actual: "\(source)")) } @@ -527,28 +516,27 @@ class Decoders { // Decoder for [Category] - Decoders.addDecoder(clazz: [Category].self) { (source: AnyObject) -> Decoded<[Category]> in - return Decoders.decode(clazz: [Category].self, source: source) + Decoders.addDecoder(clazz: [Category].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Category]> in + return Decoders.decode(clazz: [Category].self, source: source, instance: instance) } // Decoder for Category - Decoders.addDecoder(clazz: Category.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Category.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Category() + let result = instance == nil ? Category() : instance as! Category switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["id"] as AnyObject?) { - case let .success(value): instance.id = value + case let .success(value): result.id = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["name"] as AnyObject?) { - case let .success(value): instance.name = value + case let .success(value): result.name = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Category", actual: "\(source)")) } @@ -556,21 +544,21 @@ class Decoders { // Decoder for [ClassModel] - Decoders.addDecoder(clazz: [ClassModel].self) { (source: AnyObject) -> Decoded<[ClassModel]> in - return Decoders.decode(clazz: [ClassModel].self, source: source) + Decoders.addDecoder(clazz: [ClassModel].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[ClassModel]> in + return Decoders.decode(clazz: [ClassModel].self, source: source, instance: instance) } // Decoder for ClassModel - Decoders.addDecoder(clazz: ClassModel.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: ClassModel.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = ClassModel() + let result = instance == nil ? ClassModel() : instance as! ClassModel switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["_class"] as AnyObject?) { - case let .success(value): instance._class = value + case let .success(value): result._class = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "ClassModel", actual: "\(source)")) } @@ -578,21 +566,21 @@ class Decoders { // Decoder for [Client] - Decoders.addDecoder(clazz: [Client].self) { (source: AnyObject) -> Decoded<[Client]> in - return Decoders.decode(clazz: [Client].self, source: source) + Decoders.addDecoder(clazz: [Client].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Client]> in + return Decoders.decode(clazz: [Client].self, source: source, instance: instance) } // Decoder for Client - Decoders.addDecoder(clazz: Client.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Client.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Client() + let result = instance == nil ? Client() : instance as! Client switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["client"] as AnyObject?) { - case let .success(value): instance.client = value + case let .success(value): result.client = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Client", actual: "\(source)")) } @@ -600,35 +588,36 @@ class Decoders { // Decoder for [Dog] - Decoders.addDecoder(clazz: [Dog].self) { (source: AnyObject) -> Decoded<[Dog]> in - return Decoders.decode(clazz: [Dog].self, source: source) + Decoders.addDecoder(clazz: [Dog].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Dog]> in + return Decoders.decode(clazz: [Dog].self, source: source, instance: instance) } // Decoder for Dog - Decoders.addDecoder(clazz: Dog.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Dog.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Dog() + let result = instance == nil ? Dog() : instance as! Dog + if decoders["\(Animal.self)"] != nil { + _ = Decoders.decode(clazz: Animal.self, source: source, instance: result) + } switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["className"] as AnyObject?) { - case let .success(value): instance.className = value + case let .success(value): result.className = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["color"] as AnyObject?) { - case let .success(value): instance.color = value + case let .success(value): result.color = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["breed"] as AnyObject?) { - case let .success(value): instance.breed = value + case let .success(value): result.breed = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Dog", actual: "\(source)")) } @@ -636,28 +625,27 @@ class Decoders { // Decoder for [EnumArrays] - Decoders.addDecoder(clazz: [EnumArrays].self) { (source: AnyObject) -> Decoded<[EnumArrays]> in - return Decoders.decode(clazz: [EnumArrays].self, source: source) + Decoders.addDecoder(clazz: [EnumArrays].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[EnumArrays]> in + return Decoders.decode(clazz: [EnumArrays].self, source: source, instance: instance) } // Decoder for EnumArrays - Decoders.addDecoder(clazz: EnumArrays.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: EnumArrays.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = EnumArrays() + let result = instance == nil ? EnumArrays() : instance as! EnumArrays switch Decoders.decodeOptional(clazz: EnumArrays.JustSymbol.self, source: sourceDictionary["just_symbol"] as AnyObject?) { - case let .success(value): instance.justSymbol = value + case let .success(value): result.justSymbol = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Array.self, source: sourceDictionary["array_enum"] as AnyObject?) { - case let .success(value): instance.arrayEnum = value + case let .success(value): result.arrayEnum = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "EnumArrays", actual: "\(source)")) } @@ -665,53 +653,50 @@ class Decoders { // Decoder for [EnumClass] - Decoders.addDecoder(clazz: [EnumClass].self) { (source: AnyObject) -> Decoded<[EnumClass]> in - return Decoders.decode(clazz: [EnumClass].self, source: source) + Decoders.addDecoder(clazz: [EnumClass].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[EnumClass]> in + return Decoders.decode(clazz: [EnumClass].self, source: source, instance: instance) } // Decoder for EnumClass - Decoders.addDecoder(clazz: EnumClass.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: EnumClass.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in //TODO: I don't think we need this anymore - return Decoders.decode(clazz: EnumClass.self, source: source) + return Decoders.decode(clazz: EnumClass.self, source: source, instance: instance) } // Decoder for [EnumTest] - Decoders.addDecoder(clazz: [EnumTest].self) { (source: AnyObject) -> Decoded<[EnumTest]> in - return Decoders.decode(clazz: [EnumTest].self, source: source) + Decoders.addDecoder(clazz: [EnumTest].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[EnumTest]> in + return Decoders.decode(clazz: [EnumTest].self, source: source, instance: instance) } // Decoder for EnumTest - Decoders.addDecoder(clazz: EnumTest.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: EnumTest.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = EnumTest() + let result = instance == nil ? EnumTest() : instance as! EnumTest switch Decoders.decodeOptional(clazz: EnumTest.EnumString.self, source: sourceDictionary["enum_string"] as AnyObject?) { - case let .success(value): instance.enumString = value + case let .success(value): result.enumString = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: EnumTest.EnumInteger.self, source: sourceDictionary["enum_integer"] as AnyObject?) { - case let .success(value): instance.enumInteger = value + case let .success(value): result.enumInteger = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: EnumTest.EnumNumber.self, source: sourceDictionary["enum_number"] as AnyObject?) { - case let .success(value): instance.enumNumber = value + case let .success(value): result.enumNumber = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: OuterEnum.self, source: sourceDictionary["outerEnum"] as AnyObject?) { - case let .success(value): instance.outerEnum = value + case let .success(value): result.outerEnum = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "EnumTest", actual: "\(source)")) } @@ -719,105 +704,93 @@ class Decoders { // Decoder for [FormatTest] - Decoders.addDecoder(clazz: [FormatTest].self) { (source: AnyObject) -> Decoded<[FormatTest]> in - return Decoders.decode(clazz: [FormatTest].self, source: source) + Decoders.addDecoder(clazz: [FormatTest].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[FormatTest]> in + return Decoders.decode(clazz: [FormatTest].self, source: source, instance: instance) } // Decoder for FormatTest - Decoders.addDecoder(clazz: FormatTest.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: FormatTest.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = FormatTest() + let result = instance == nil ? FormatTest() : instance as! FormatTest switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["integer"] as AnyObject?) { - case let .success(value): instance.integer = value + case let .success(value): result.integer = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["int32"] as AnyObject?) { - case let .success(value): instance.int32 = value + case let .success(value): result.int32 = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["int64"] as AnyObject?) { - case let .success(value): instance.int64 = value + case let .success(value): result.int64 = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Double.self, source: sourceDictionary["number"] as AnyObject?) { - case let .success(value): instance.number = value + case let .success(value): result.number = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Float.self, source: sourceDictionary["float"] as AnyObject?) { - case let .success(value): instance.float = value + case let .success(value): result.float = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Double.self, source: sourceDictionary["double"] as AnyObject?) { - case let .success(value): instance.double = value + case let .success(value): result.double = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["string"] as AnyObject?) { - case let .success(value): instance.string = value + case let .success(value): result.string = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Data.self, source: sourceDictionary["byte"] as AnyObject?) { - case let .success(value): instance.byte = value + case let .success(value): result.byte = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Data.self, source: sourceDictionary["binary"] as AnyObject?) { - case let .success(value): instance.binary = value + case let .success(value): result.binary = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: ISOFullDate.self, source: sourceDictionary["date"] as AnyObject?) { - case let .success(value): instance.date = value + case let .success(value): result.date = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Date.self, source: sourceDictionary["dateTime"] as AnyObject?) { - case let .success(value): instance.dateTime = value + case let .success(value): result.dateTime = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: UUID.self, source: sourceDictionary["uuid"] as AnyObject?) { - case let .success(value): instance.uuid = value + case let .success(value): result.uuid = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["password"] as AnyObject?) { - case let .success(value): instance.password = value + case let .success(value): result.password = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "FormatTest", actual: "\(source)")) } @@ -825,28 +798,27 @@ class Decoders { // Decoder for [HasOnlyReadOnly] - Decoders.addDecoder(clazz: [HasOnlyReadOnly].self) { (source: AnyObject) -> Decoded<[HasOnlyReadOnly]> in - return Decoders.decode(clazz: [HasOnlyReadOnly].self, source: source) + Decoders.addDecoder(clazz: [HasOnlyReadOnly].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[HasOnlyReadOnly]> in + return Decoders.decode(clazz: [HasOnlyReadOnly].self, source: source, instance: instance) } // Decoder for HasOnlyReadOnly - Decoders.addDecoder(clazz: HasOnlyReadOnly.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: HasOnlyReadOnly.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = HasOnlyReadOnly() + let result = instance == nil ? HasOnlyReadOnly() : instance as! HasOnlyReadOnly switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["bar"] as AnyObject?) { - case let .success(value): instance.bar = value + case let .success(value): result.bar = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["foo"] as AnyObject?) { - case let .success(value): instance.foo = value + case let .success(value): result.foo = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "HasOnlyReadOnly", actual: "\(source)")) } @@ -854,21 +826,21 @@ class Decoders { // Decoder for [List] - Decoders.addDecoder(clazz: [List].self) { (source: AnyObject) -> Decoded<[List]> in - return Decoders.decode(clazz: [List].self, source: source) + Decoders.addDecoder(clazz: [List].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[List]> in + return Decoders.decode(clazz: [List].self, source: source, instance: instance) } // Decoder for List - Decoders.addDecoder(clazz: List.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: List.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = List() + let result = instance == nil ? List() : instance as! List switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["123-list"] as AnyObject?) { - case let .success(value): instance._123List = value + case let .success(value): result._123List = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "List", actual: "\(source)")) } @@ -876,28 +848,27 @@ class Decoders { // Decoder for [MapTest] - Decoders.addDecoder(clazz: [MapTest].self) { (source: AnyObject) -> Decoded<[MapTest]> in - return Decoders.decode(clazz: [MapTest].self, source: source) + Decoders.addDecoder(clazz: [MapTest].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[MapTest]> in + return Decoders.decode(clazz: [MapTest].self, source: source, instance: instance) } // Decoder for MapTest - Decoders.addDecoder(clazz: MapTest.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: MapTest.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = MapTest() + let result = instance == nil ? MapTest() : instance as! MapTest switch Decoders.decodeOptional(clazz: [String:[String:String]].self, source: sourceDictionary["map_map_of_string"] as AnyObject?) { - case let .success(value): instance.mapMapOfString = value + case let .success(value): result.mapMapOfString = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: MapTest.MapOfEnumString.self, source: sourceDictionary["map_of_enum_string"] as AnyObject?) { /* - case let .success(value): instance.mapOfEnumString = value + case let .success(value): result.mapOfEnumString = value case let .failure(error): return .failure(error) */ default: break //TODO: handle enum map scenario } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "MapTest", actual: "\(source)")) } @@ -905,35 +876,33 @@ class Decoders { // Decoder for [MixedPropertiesAndAdditionalPropertiesClass] - Decoders.addDecoder(clazz: [MixedPropertiesAndAdditionalPropertiesClass].self) { (source: AnyObject) -> Decoded<[MixedPropertiesAndAdditionalPropertiesClass]> in - return Decoders.decode(clazz: [MixedPropertiesAndAdditionalPropertiesClass].self, source: source) + Decoders.addDecoder(clazz: [MixedPropertiesAndAdditionalPropertiesClass].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[MixedPropertiesAndAdditionalPropertiesClass]> in + return Decoders.decode(clazz: [MixedPropertiesAndAdditionalPropertiesClass].self, source: source, instance: instance) } // Decoder for MixedPropertiesAndAdditionalPropertiesClass - Decoders.addDecoder(clazz: MixedPropertiesAndAdditionalPropertiesClass.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: MixedPropertiesAndAdditionalPropertiesClass.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = MixedPropertiesAndAdditionalPropertiesClass() + let result = instance == nil ? MixedPropertiesAndAdditionalPropertiesClass() : instance as! MixedPropertiesAndAdditionalPropertiesClass switch Decoders.decodeOptional(clazz: UUID.self, source: sourceDictionary["uuid"] as AnyObject?) { - case let .success(value): instance.uuid = value + case let .success(value): result.uuid = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Date.self, source: sourceDictionary["dateTime"] as AnyObject?) { - case let .success(value): instance.dateTime = value + case let .success(value): result.dateTime = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: [String:Animal].self, source: sourceDictionary["map"] as AnyObject?) { - case let .success(value): instance.map = value + case let .success(value): result.map = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "MixedPropertiesAndAdditionalPropertiesClass", actual: "\(source)")) } @@ -941,28 +910,27 @@ class Decoders { // Decoder for [Model200Response] - Decoders.addDecoder(clazz: [Model200Response].self) { (source: AnyObject) -> Decoded<[Model200Response]> in - return Decoders.decode(clazz: [Model200Response].self, source: source) + Decoders.addDecoder(clazz: [Model200Response].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Model200Response]> in + return Decoders.decode(clazz: [Model200Response].self, source: source, instance: instance) } // Decoder for Model200Response - Decoders.addDecoder(clazz: Model200Response.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Model200Response.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Model200Response() + let result = instance == nil ? Model200Response() : instance as! Model200Response switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["name"] as AnyObject?) { - case let .success(value): instance.name = value + case let .success(value): result.name = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["class"] as AnyObject?) { - case let .success(value): instance._class = value + case let .success(value): result._class = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Model200Response", actual: "\(source)")) } @@ -970,42 +938,39 @@ class Decoders { // Decoder for [Name] - Decoders.addDecoder(clazz: [Name].self) { (source: AnyObject) -> Decoded<[Name]> in - return Decoders.decode(clazz: [Name].self, source: source) + Decoders.addDecoder(clazz: [Name].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Name]> in + return Decoders.decode(clazz: [Name].self, source: source, instance: instance) } // Decoder for Name - Decoders.addDecoder(clazz: Name.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Name.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Name() + let result = instance == nil ? Name() : instance as! Name switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["name"] as AnyObject?) { - case let .success(value): instance.name = value + case let .success(value): result.name = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["snake_case"] as AnyObject?) { - case let .success(value): instance.snakeCase = value + case let .success(value): result.snakeCase = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["property"] as AnyObject?) { - case let .success(value): instance.property = value + case let .success(value): result.property = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["123Number"] as AnyObject?) { - case let .success(value): instance._123Number = value + case let .success(value): result._123Number = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Name", actual: "\(source)")) } @@ -1013,21 +978,21 @@ class Decoders { // Decoder for [NumberOnly] - Decoders.addDecoder(clazz: [NumberOnly].self) { (source: AnyObject) -> Decoded<[NumberOnly]> in - return Decoders.decode(clazz: [NumberOnly].self, source: source) + Decoders.addDecoder(clazz: [NumberOnly].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[NumberOnly]> in + return Decoders.decode(clazz: [NumberOnly].self, source: source, instance: instance) } // Decoder for NumberOnly - Decoders.addDecoder(clazz: NumberOnly.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: NumberOnly.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = NumberOnly() + let result = instance == nil ? NumberOnly() : instance as! NumberOnly switch Decoders.decodeOptional(clazz: Double.self, source: sourceDictionary["JustNumber"] as AnyObject?) { - case let .success(value): instance.justNumber = value + case let .success(value): result.justNumber = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "NumberOnly", actual: "\(source)")) } @@ -1035,56 +1000,51 @@ class Decoders { // Decoder for [Order] - Decoders.addDecoder(clazz: [Order].self) { (source: AnyObject) -> Decoded<[Order]> in - return Decoders.decode(clazz: [Order].self, source: source) + Decoders.addDecoder(clazz: [Order].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Order]> in + return Decoders.decode(clazz: [Order].self, source: source, instance: instance) } // Decoder for Order - Decoders.addDecoder(clazz: Order.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Order.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Order() + let result = instance == nil ? Order() : instance as! Order switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["id"] as AnyObject?) { - case let .success(value): instance.id = value + case let .success(value): result.id = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["petId"] as AnyObject?) { - case let .success(value): instance.petId = value + case let .success(value): result.petId = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["quantity"] as AnyObject?) { - case let .success(value): instance.quantity = value + case let .success(value): result.quantity = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Date.self, source: sourceDictionary["shipDate"] as AnyObject?) { - case let .success(value): instance.shipDate = value + case let .success(value): result.shipDate = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Order.Status.self, source: sourceDictionary["status"] as AnyObject?) { - case let .success(value): instance.status = value + case let .success(value): result.status = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Bool.self, source: sourceDictionary["complete"] as AnyObject?) { - case let .success(value): instance.complete = value + case let .success(value): result.complete = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Order", actual: "\(source)")) } @@ -1092,67 +1052,62 @@ class Decoders { // Decoder for [OuterEnum] - Decoders.addDecoder(clazz: [OuterEnum].self) { (source: AnyObject) -> Decoded<[OuterEnum]> in - return Decoders.decode(clazz: [OuterEnum].self, source: source) + Decoders.addDecoder(clazz: [OuterEnum].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[OuterEnum]> in + return Decoders.decode(clazz: [OuterEnum].self, source: source, instance: instance) } // Decoder for OuterEnum - Decoders.addDecoder(clazz: OuterEnum.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: OuterEnum.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in //TODO: I don't think we need this anymore - return Decoders.decode(clazz: OuterEnum.self, source: source) + return Decoders.decode(clazz: OuterEnum.self, source: source, instance: instance) } // Decoder for [Pet] - Decoders.addDecoder(clazz: [Pet].self) { (source: AnyObject) -> Decoded<[Pet]> in - return Decoders.decode(clazz: [Pet].self, source: source) + Decoders.addDecoder(clazz: [Pet].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Pet]> in + return Decoders.decode(clazz: [Pet].self, source: source, instance: instance) } // Decoder for Pet - Decoders.addDecoder(clazz: Pet.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Pet.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Pet() + let result = instance == nil ? Pet() : instance as! Pet switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["id"] as AnyObject?) { - case let .success(value): instance.id = value + case let .success(value): result.id = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Category.self, source: sourceDictionary["category"] as AnyObject?) { - case let .success(value): instance.category = value + case let .success(value): result.category = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["name"] as AnyObject?) { - case let .success(value): instance.name = value + case let .success(value): result.name = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: [String].self, source: sourceDictionary["photoUrls"] as AnyObject?) { - case let .success(value): instance.photoUrls = value + case let .success(value): result.photoUrls = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: [Tag].self, source: sourceDictionary["tags"] as AnyObject?) { - case let .success(value): instance.tags = value + case let .success(value): result.tags = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Pet.Status.self, source: sourceDictionary["status"] as AnyObject?) { - case let .success(value): instance.status = value + case let .success(value): result.status = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Pet", actual: "\(source)")) } @@ -1160,28 +1115,27 @@ class Decoders { // Decoder for [ReadOnlyFirst] - Decoders.addDecoder(clazz: [ReadOnlyFirst].self) { (source: AnyObject) -> Decoded<[ReadOnlyFirst]> in - return Decoders.decode(clazz: [ReadOnlyFirst].self, source: source) + Decoders.addDecoder(clazz: [ReadOnlyFirst].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[ReadOnlyFirst]> in + return Decoders.decode(clazz: [ReadOnlyFirst].self, source: source, instance: instance) } // Decoder for ReadOnlyFirst - Decoders.addDecoder(clazz: ReadOnlyFirst.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: ReadOnlyFirst.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = ReadOnlyFirst() + let result = instance == nil ? ReadOnlyFirst() : instance as! ReadOnlyFirst switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["bar"] as AnyObject?) { - case let .success(value): instance.bar = value + case let .success(value): result.bar = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["baz"] as AnyObject?) { - case let .success(value): instance.baz = value + case let .success(value): result.baz = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "ReadOnlyFirst", actual: "\(source)")) } @@ -1189,21 +1143,21 @@ class Decoders { // Decoder for [Return] - Decoders.addDecoder(clazz: [Return].self) { (source: AnyObject) -> Decoded<[Return]> in - return Decoders.decode(clazz: [Return].self, source: source) + Decoders.addDecoder(clazz: [Return].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Return]> in + return Decoders.decode(clazz: [Return].self, source: source, instance: instance) } // Decoder for Return - Decoders.addDecoder(clazz: Return.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Return.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Return() + let result = instance == nil ? Return() : instance as! Return switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["return"] as AnyObject?) { - case let .success(value): instance._return = value + case let .success(value): result._return = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Return", actual: "\(source)")) } @@ -1211,21 +1165,21 @@ class Decoders { // Decoder for [SpecialModelName] - Decoders.addDecoder(clazz: [SpecialModelName].self) { (source: AnyObject) -> Decoded<[SpecialModelName]> in - return Decoders.decode(clazz: [SpecialModelName].self, source: source) + Decoders.addDecoder(clazz: [SpecialModelName].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[SpecialModelName]> in + return Decoders.decode(clazz: [SpecialModelName].self, source: source, instance: instance) } // Decoder for SpecialModelName - Decoders.addDecoder(clazz: SpecialModelName.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: SpecialModelName.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = SpecialModelName() + let result = instance == nil ? SpecialModelName() : instance as! SpecialModelName switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["$special[property.name]"] as AnyObject?) { - case let .success(value): instance.specialPropertyName = value + case let .success(value): result.specialPropertyName = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "SpecialModelName", actual: "\(source)")) } @@ -1233,28 +1187,27 @@ class Decoders { // Decoder for [Tag] - Decoders.addDecoder(clazz: [Tag].self) { (source: AnyObject) -> Decoded<[Tag]> in - return Decoders.decode(clazz: [Tag].self, source: source) + Decoders.addDecoder(clazz: [Tag].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Tag]> in + return Decoders.decode(clazz: [Tag].self, source: source, instance: instance) } // Decoder for Tag - Decoders.addDecoder(clazz: Tag.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Tag.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Tag() + let result = instance == nil ? Tag() : instance as! Tag switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["id"] as AnyObject?) { - case let .success(value): instance.id = value + case let .success(value): result.id = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["name"] as AnyObject?) { - case let .success(value): instance.name = value + case let .success(value): result.name = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Tag", actual: "\(source)")) } @@ -1262,70 +1215,63 @@ class Decoders { // Decoder for [User] - Decoders.addDecoder(clazz: [User].self) { (source: AnyObject) -> Decoded<[User]> in - return Decoders.decode(clazz: [User].self, source: source) + Decoders.addDecoder(clazz: [User].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[User]> in + return Decoders.decode(clazz: [User].self, source: source, instance: instance) } // Decoder for User - Decoders.addDecoder(clazz: User.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: User.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = User() + let result = instance == nil ? User() : instance as! User switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["id"] as AnyObject?) { - case let .success(value): instance.id = value + case let .success(value): result.id = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["username"] as AnyObject?) { - case let .success(value): instance.username = value + case let .success(value): result.username = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["firstName"] as AnyObject?) { - case let .success(value): instance.firstName = value + case let .success(value): result.firstName = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["lastName"] as AnyObject?) { - case let .success(value): instance.lastName = value + case let .success(value): result.lastName = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["email"] as AnyObject?) { - case let .success(value): instance.email = value + case let .success(value): result.email = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["password"] as AnyObject?) { - case let .success(value): instance.password = value + case let .success(value): result.password = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["phone"] as AnyObject?) { - case let .success(value): instance.phone = value + case let .success(value): result.phone = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["userStatus"] as AnyObject?) { - case let .success(value): instance.userStatus = value + case let .success(value): result.userStatus = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "User", actual: "\(source)")) } diff --git a/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/APIs/FakeAPI.swift b/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/APIs/FakeAPI.swift index e4243744c6c..44748ca898b 100644 --- a/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/APIs/FakeAPI.swift @@ -45,9 +45,9 @@ open class FakeAPI: APIBase { To test \"client\" model - PATCH /fake - To test \"client\" model - - examples: [{contentType=application/json, example={ + - examples: [{example={ "client" : "aeiou" -}}] +}, contentType=application/json}] - parameter body: (body) client model diff --git a/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/APIs/Fake_classname_tags123API.swift b/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/APIs/Fake_classname_tags123API.swift index e578e04ba23..9d6452226ff 100644 --- a/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/APIs/Fake_classname_tags123API.swift +++ b/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/APIs/Fake_classname_tags123API.swift @@ -44,9 +44,9 @@ open class Fake_classname_tags123API: APIBase { /** To test class name in snake case - PATCH /fake_classname_test - - examples: [{contentType=application/json, example={ + - examples: [{example={ "client" : "aeiou" -}}] +}, contentType=application/json}] - parameter body: (body) client model diff --git a/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift b/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift index 1b4f331fc1d..46585b5fac1 100644 --- a/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift +++ b/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift @@ -175,7 +175,7 @@ open class PetAPI: APIBase { - OAuth: - type: oauth2 - name: petstore_auth - - examples: [{contentType=application/xml, example= + - examples: [{example= 123456789 doggie @@ -184,21 +184,21 @@ open class PetAPI: APIBase { aeiou -}, {contentType=application/json, example=[ { - "photoUrls" : [ "aeiou" ], - "name" : "doggie", +, contentType=application/xml}, {example=[ { + "tags" : [ { + "id" : 1, + "name" : "aeiou" + } ], "id" : 0, "category" : { - "name" : "aeiou", - "id" : 6 + "id" : 6, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 1 - } ], - "status" : "available" -} ]}] - - examples: [{contentType=application/xml, example= + "status" : "available", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +} ], contentType=application/json}] + - examples: [{example= 123456789 doggie @@ -207,20 +207,20 @@ open class PetAPI: APIBase { aeiou -}, {contentType=application/json, example=[ { - "photoUrls" : [ "aeiou" ], - "name" : "doggie", +, contentType=application/xml}, {example=[ { + "tags" : [ { + "id" : 1, + "name" : "aeiou" + } ], "id" : 0, "category" : { - "name" : "aeiou", - "id" : 6 + "id" : 6, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 1 - } ], - "status" : "available" -} ]}] + "status" : "available", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +} ], contentType=application/json}] - parameter status: (query) Status values that need to be considered for filter @@ -279,7 +279,7 @@ open class PetAPI: APIBase { - OAuth: - type: oauth2 - name: petstore_auth - - examples: [{contentType=application/xml, example= + - examples: [{example= 123456789 doggie @@ -288,21 +288,21 @@ open class PetAPI: APIBase { aeiou -}, {contentType=application/json, example=[ { - "photoUrls" : [ "aeiou" ], - "name" : "doggie", +, contentType=application/xml}, {example=[ { + "tags" : [ { + "id" : 1, + "name" : "aeiou" + } ], "id" : 0, "category" : { - "name" : "aeiou", - "id" : 6 + "id" : 6, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 1 - } ], - "status" : "available" -} ]}] - - examples: [{contentType=application/xml, example= + "status" : "available", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +} ], contentType=application/json}] + - examples: [{example= 123456789 doggie @@ -311,20 +311,20 @@ open class PetAPI: APIBase { aeiou -}, {contentType=application/json, example=[ { - "photoUrls" : [ "aeiou" ], - "name" : "doggie", +, contentType=application/xml}, {example=[ { + "tags" : [ { + "id" : 1, + "name" : "aeiou" + } ], "id" : 0, "category" : { - "name" : "aeiou", - "id" : 6 + "id" : 6, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 1 - } ], - "status" : "available" -} ]}] + "status" : "available", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +} ], contentType=application/json}] - parameter tags: (query) Tags to filter by @@ -383,7 +383,7 @@ open class PetAPI: APIBase { - API Key: - type: apiKey api_key - name: api_key - - examples: [{contentType=application/xml, example= + - examples: [{example= 123456789 doggie @@ -392,21 +392,21 @@ open class PetAPI: APIBase { aeiou -}, {contentType=application/json, example={ - "photoUrls" : [ "aeiou" ], - "name" : "doggie", +, contentType=application/xml}, {example={ + "tags" : [ { + "id" : 1, + "name" : "aeiou" + } ], "id" : 0, "category" : { - "name" : "aeiou", - "id" : 6 + "id" : 6, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 1 - } ], - "status" : "available" -}}] - - examples: [{contentType=application/xml, example= + "status" : "available", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +}, contentType=application/json}] + - examples: [{example= 123456789 doggie @@ -415,20 +415,20 @@ open class PetAPI: APIBase { aeiou -}, {contentType=application/json, example={ - "photoUrls" : [ "aeiou" ], - "name" : "doggie", +, contentType=application/xml}, {example={ + "tags" : [ { + "id" : 1, + "name" : "aeiou" + } ], "id" : 0, "category" : { - "name" : "aeiou", - "id" : 6 + "id" : 6, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 1 - } ], - "status" : "available" -}}] + "status" : "available", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +}, contentType=application/json}] - parameter petId: (path) ID of pet to return @@ -612,11 +612,11 @@ open class PetAPI: APIBase { - OAuth: - type: oauth2 - name: petstore_auth - - examples: [{contentType=application/json, example={ + - examples: [{example={ + "message" : "aeiou", "code" : 0, - "type" : "aeiou", - "message" : "aeiou" -}}] + "type" : "aeiou" +}, contentType=application/json}] - parameter petId: (path) ID of pet to update - parameter additionalMetadata: (form) Additional data to pass to server (optional) diff --git a/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift b/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift index f2bd2f0c387..39d97ab1740 100644 --- a/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift @@ -99,9 +99,9 @@ open class StoreAPI: APIBase { - API Key: - type: apiKey api_key - name: api_key - - examples: [{contentType=application/json, example={ + - examples: [{example={ "key" : 0 -}}] +}, contentType=application/json}] - returns: RequestBuilder<[String:Int32]> */ @@ -152,36 +152,36 @@ open class StoreAPI: APIBase { Find purchase order by ID - GET /store/order/{order_id} - For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - - examples: [{contentType=application/xml, example= + - examples: [{example= 123456789 123456789 123 2000-01-23T04:56:07.000Z aeiou true -}, {contentType=application/json, example={ - "petId" : 6, - "quantity" : 1, +, contentType=application/xml}, {example={ "id" : 0, - "shipDate" : "2000-01-23T04:56:07.000+00:00", + "petId" : 6, "complete" : false, - "status" : "placed" -}}] - - examples: [{contentType=application/xml, example= + "status" : "placed", + "quantity" : 1, + "shipDate" : "2000-01-23T04:56:07.000+00:00" +}, contentType=application/json}] + - examples: [{example= 123456789 123456789 123 2000-01-23T04:56:07.000Z aeiou true -}, {contentType=application/json, example={ - "petId" : 6, - "quantity" : 1, +, contentType=application/xml}, {example={ "id" : 0, - "shipDate" : "2000-01-23T04:56:07.000+00:00", + "petId" : 6, "complete" : false, - "status" : "placed" -}}] + "status" : "placed", + "quantity" : 1, + "shipDate" : "2000-01-23T04:56:07.000+00:00" +}, contentType=application/json}] - parameter orderId: (path) ID of pet that needs to be fetched @@ -235,36 +235,36 @@ open class StoreAPI: APIBase { Place an order for a pet - POST /store/order - - - examples: [{contentType=application/xml, example= + - examples: [{example= 123456789 123456789 123 2000-01-23T04:56:07.000Z aeiou true -}, {contentType=application/json, example={ - "petId" : 6, - "quantity" : 1, +, contentType=application/xml}, {example={ "id" : 0, - "shipDate" : "2000-01-23T04:56:07.000+00:00", + "petId" : 6, "complete" : false, - "status" : "placed" -}}] - - examples: [{contentType=application/xml, example= + "status" : "placed", + "quantity" : 1, + "shipDate" : "2000-01-23T04:56:07.000+00:00" +}, contentType=application/json}] + - examples: [{example= 123456789 123456789 123 2000-01-23T04:56:07.000Z aeiou true -}, {contentType=application/json, example={ - "petId" : 6, - "quantity" : 1, +, contentType=application/xml}, {example={ "id" : 0, - "shipDate" : "2000-01-23T04:56:07.000+00:00", + "petId" : 6, "complete" : false, - "status" : "placed" -}}] + "status" : "placed", + "quantity" : 1, + "shipDate" : "2000-01-23T04:56:07.000+00:00" +}, contentType=application/json}] - parameter body: (body) order placed for purchasing the pet diff --git a/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift b/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift index 02bd372ac49..6e061e76765 100644 --- a/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift +++ b/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift @@ -254,7 +254,7 @@ open class UserAPI: APIBase { Get user by user name - GET /user/{username} - - - examples: [{contentType=application/xml, example= + - examples: [{example= 123456789 aeiou aeiou @@ -263,17 +263,17 @@ open class UserAPI: APIBase { aeiou aeiou 123 -}, {contentType=application/json, example={ - "firstName" : "aeiou", - "lastName" : "aeiou", - "password" : "aeiou", - "userStatus" : 6, - "phone" : "aeiou", +, contentType=application/xml}, {example={ "id" : 0, + "lastName" : "aeiou", + "phone" : "aeiou", + "username" : "aeiou", "email" : "aeiou", - "username" : "aeiou" -}}] - - examples: [{contentType=application/xml, example= + "userStatus" : 6, + "firstName" : "aeiou", + "password" : "aeiou" +}, contentType=application/json}] + - examples: [{example= 123456789 aeiou aeiou @@ -282,16 +282,16 @@ open class UserAPI: APIBase { aeiou aeiou 123 -}, {contentType=application/json, example={ - "firstName" : "aeiou", - "lastName" : "aeiou", - "password" : "aeiou", - "userStatus" : 6, - "phone" : "aeiou", +, contentType=application/xml}, {example={ "id" : 0, + "lastName" : "aeiou", + "phone" : "aeiou", + "username" : "aeiou", "email" : "aeiou", - "username" : "aeiou" -}}] + "userStatus" : 6, + "firstName" : "aeiou", + "password" : "aeiou" +}, contentType=application/json}] - parameter username: (path) The name that needs to be fetched. Use user1 for testing. @@ -349,8 +349,8 @@ open class UserAPI: APIBase { - - responseHeaders: [X-Rate-Limit(Int32), X-Expires-After(Date)] - responseHeaders: [X-Rate-Limit(Int32), X-Expires-After(Date)] - - examples: [{contentType=application/xml, example=aeiou}, {contentType=application/json, example="aeiou"}] - - examples: [{contentType=application/xml, example=aeiou}, {contentType=application/json, example="aeiou"}] + - examples: [{example=aeiou, contentType=application/xml}, {example="aeiou", contentType=application/json}] + - examples: [{example=aeiou, contentType=application/xml}, {example="aeiou", contentType=application/json}] - parameter username: (query) The user name for login - parameter password: (query) The password for login in clear text diff --git a/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/AlamofireImplementations.swift b/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/AlamofireImplementations.swift index 69a80df05d2..8fe9e375677 100644 --- a/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/AlamofireImplementations.swift +++ b/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/AlamofireImplementations.swift @@ -197,7 +197,7 @@ open class AlamofireRequestBuilder: RequestBuilder { return } if let json: Any = response.result.value { - let decoded = Decoders.decode(clazz: T.self, source: json as AnyObject) + let decoded = Decoders.decode(clazz: T.self, source: json as AnyObject, instance: nil) switch decoded { case let .success(object): completion(Response(response: response.response!, body: object), nil) case let .failure(error): completion(nil, ErrorResponse.DecodeError(response: response.data, decodeError: error)) diff --git a/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/Models.swift b/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/Models.swift index d7c5b457005..2dd4a72e0c4 100644 --- a/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/Models.swift +++ b/samples/client/petstore/swift3/promisekit/PetstoreClient/Classes/Swaggers/Models.swift @@ -60,17 +60,16 @@ public enum DecodeError { private var once = Int() class Decoders { - static fileprivate var decoders = Dictionary AnyObject)>() + static fileprivate var decoders = Dictionary AnyObject)>() - - static func addDecoder(clazz: T.Type, decoder: @escaping ((AnyObject) -> Decoded)) { + static func addDecoder(clazz: T.Type, decoder: @escaping ((AnyObject, AnyObject?) -> Decoded)) { let key = "\(T.self)" - decoders[key] = { decoder($0) as AnyObject } + decoders[key] = { decoder($0, $1) as AnyObject } } static func decode(clazz: T.Type, discriminator: String, source: AnyObject) -> Decoded { let key = discriminator - if let decoder = decoders[key], let value = decoder(source) as? Decoded { + if let decoder = decoders[key], let value = decoder(source, nil) as? Decoded { return value } else { return .failure(.typeMismatch(expected: String(describing: clazz), actual: String(describing: source))) @@ -81,7 +80,7 @@ class Decoders { if let sourceArray = source as? [AnyObject] { var values = [T]() for sourceValue in sourceArray { - switch Decoders.decode(clazz: T.self, source: sourceValue) { + switch Decoders.decode(clazz: T.self, source: sourceValue, instance: nil) { case let .success(value): values.append(value) case let .failure(error): @@ -98,7 +97,7 @@ class Decoders { if let sourceDictionary = source as? [Key: AnyObject] { var dictionary = [Key:T]() for (key, value) in sourceDictionary { - switch Decoders.decode(clazz: T.self, source: value) { + switch Decoders.decode(clazz: T.self, source: value, instance: nil) { case let .success(value): dictionary[key] = value case let .failure(error): @@ -124,7 +123,7 @@ class Decoders { } } - static func decode(clazz: T.Type, source: AnyObject) -> Decoded { + static func decode(clazz: T.Type, source: AnyObject, instance: AnyObject?) -> Decoded { initialize() if let value = source.int32Value as? T, source is NSNumber, T.self is Int32.Type { return .success(value) @@ -143,7 +142,7 @@ class Decoders { } let key = "\(T.self)" - if let decoder = decoders[key], let value = decoder(source) as? Decoded { + if let decoder = decoders[key], let value = decoder(source, instance) as? Decoded { return value } else { return .failure(.typeMismatch(expected: String(describing: clazz), actual: String(describing: source))) @@ -157,7 +156,7 @@ class Decoders { static func decodeOptional(clazz: T.Type, source: AnyObject?) -> Decoded { if let source = source, !(source is NSNull) { - switch Decoders.decode(clazz: clazz, source: source) { + switch Decoders.decode(clazz: clazz, source: source, instance: nil) { case let .success(value): return .success(value) case let .failure(error): return .failure(error) } @@ -170,7 +169,7 @@ class Decoders { if let source = source as? [AnyObject] { var values = [T]() for sourceValue in source { - switch Decoders.decode(clazz: T.self, source: sourceValue) { + switch Decoders.decode(clazz: T.self, source: sourceValue, instance: nil) { case let .success(value): values.append(value) case let .failure(error): return .failure(error) } @@ -185,7 +184,7 @@ class Decoders { if let sourceDictionary = source as? [Key: AnyObject] { var dictionary = [Key:T]() for (key, value) in sourceDictionary { - switch Decoders.decode(clazz: T.self, source: value) { + switch Decoders.decode(clazz: T.self, source: value, instance: nil) { case let .success(value): dictionary[key] = value case let .failure(error): return .failure(error) } @@ -223,7 +222,7 @@ class Decoders { return formatter } // Decoder for Date - Decoders.addDecoder(clazz: Date.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Date.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceString = source as? String { for formatter in formatters { if let date = formatter.date(from: sourceString) { @@ -243,7 +242,7 @@ class Decoders { } // Decoder for ISOFullDate - Decoders.addDecoder(clazz: ISOFullDate.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: ISOFullDate.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let string = source as? String, let isoDate = ISOFullDate.from(string: string) { return .success(isoDate) @@ -253,28 +252,27 @@ class Decoders { } // Decoder for [AdditionalPropertiesClass] - Decoders.addDecoder(clazz: [AdditionalPropertiesClass].self) { (source: AnyObject) -> Decoded<[AdditionalPropertiesClass]> in - return Decoders.decode(clazz: [AdditionalPropertiesClass].self, source: source) + Decoders.addDecoder(clazz: [AdditionalPropertiesClass].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[AdditionalPropertiesClass]> in + return Decoders.decode(clazz: [AdditionalPropertiesClass].self, source: source, instance: instance) } // Decoder for AdditionalPropertiesClass - Decoders.addDecoder(clazz: AdditionalPropertiesClass.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: AdditionalPropertiesClass.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = AdditionalPropertiesClass() + let result = instance == nil ? AdditionalPropertiesClass() : instance as! AdditionalPropertiesClass switch Decoders.decodeOptional(clazz: [String:String].self, source: sourceDictionary["map_property"] as AnyObject?) { - case let .success(value): instance.mapProperty = value + case let .success(value): result.mapProperty = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: [String:[String:String]].self, source: sourceDictionary["map_of_map_property"] as AnyObject?) { - case let .success(value): instance.mapOfMapProperty = value + case let .success(value): result.mapOfMapProperty = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "AdditionalPropertiesClass", actual: "\(source)")) } @@ -282,32 +280,31 @@ class Decoders { // Decoder for [Animal] - Decoders.addDecoder(clazz: [Animal].self) { (source: AnyObject) -> Decoded<[Animal]> in - return Decoders.decode(clazz: [Animal].self, source: source) + Decoders.addDecoder(clazz: [Animal].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Animal]> in + return Decoders.decode(clazz: [Animal].self, source: source, instance: instance) } // Decoder for Animal - Decoders.addDecoder(clazz: Animal.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Animal.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { // Check discriminator to support inheritance - if let discriminator = sourceDictionary["className"] as? String, discriminator != "Animal"{ + if let discriminator = sourceDictionary["className"] as? String, instance == nil && discriminator != "Animal"{ return Decoders.decode(clazz: Animal.self, discriminator: discriminator, source: source) } - let instance = Animal() + let result = instance == nil ? Animal() : instance as! Animal switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["className"] as AnyObject?) { - case let .success(value): instance.className = value + case let .success(value): result.className = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["color"] as AnyObject?) { - case let .success(value): instance.color = value + case let .success(value): result.color = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Animal", actual: "\(source)")) } @@ -318,35 +315,33 @@ class Decoders { // Decoder for [ApiResponse] - Decoders.addDecoder(clazz: [ApiResponse].self) { (source: AnyObject) -> Decoded<[ApiResponse]> in - return Decoders.decode(clazz: [ApiResponse].self, source: source) + Decoders.addDecoder(clazz: [ApiResponse].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[ApiResponse]> in + return Decoders.decode(clazz: [ApiResponse].self, source: source, instance: instance) } // Decoder for ApiResponse - Decoders.addDecoder(clazz: ApiResponse.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: ApiResponse.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = ApiResponse() + let result = instance == nil ? ApiResponse() : instance as! ApiResponse switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["code"] as AnyObject?) { - case let .success(value): instance.code = value + case let .success(value): result.code = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["type"] as AnyObject?) { - case let .success(value): instance.type = value + case let .success(value): result.type = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["message"] as AnyObject?) { - case let .success(value): instance.message = value + case let .success(value): result.message = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "ApiResponse", actual: "\(source)")) } @@ -354,21 +349,21 @@ class Decoders { // Decoder for [ArrayOfArrayOfNumberOnly] - Decoders.addDecoder(clazz: [ArrayOfArrayOfNumberOnly].self) { (source: AnyObject) -> Decoded<[ArrayOfArrayOfNumberOnly]> in - return Decoders.decode(clazz: [ArrayOfArrayOfNumberOnly].self, source: source) + Decoders.addDecoder(clazz: [ArrayOfArrayOfNumberOnly].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[ArrayOfArrayOfNumberOnly]> in + return Decoders.decode(clazz: [ArrayOfArrayOfNumberOnly].self, source: source, instance: instance) } // Decoder for ArrayOfArrayOfNumberOnly - Decoders.addDecoder(clazz: ArrayOfArrayOfNumberOnly.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: ArrayOfArrayOfNumberOnly.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = ArrayOfArrayOfNumberOnly() + let result = instance == nil ? ArrayOfArrayOfNumberOnly() : instance as! ArrayOfArrayOfNumberOnly switch Decoders.decodeOptional(clazz: [[Double]].self, source: sourceDictionary["ArrayArrayNumber"] as AnyObject?) { - case let .success(value): instance.arrayArrayNumber = value + case let .success(value): result.arrayArrayNumber = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "ArrayOfArrayOfNumberOnly", actual: "\(source)")) } @@ -376,21 +371,21 @@ class Decoders { // Decoder for [ArrayOfNumberOnly] - Decoders.addDecoder(clazz: [ArrayOfNumberOnly].self) { (source: AnyObject) -> Decoded<[ArrayOfNumberOnly]> in - return Decoders.decode(clazz: [ArrayOfNumberOnly].self, source: source) + Decoders.addDecoder(clazz: [ArrayOfNumberOnly].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[ArrayOfNumberOnly]> in + return Decoders.decode(clazz: [ArrayOfNumberOnly].self, source: source, instance: instance) } // Decoder for ArrayOfNumberOnly - Decoders.addDecoder(clazz: ArrayOfNumberOnly.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: ArrayOfNumberOnly.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = ArrayOfNumberOnly() + let result = instance == nil ? ArrayOfNumberOnly() : instance as! ArrayOfNumberOnly switch Decoders.decodeOptional(clazz: [Double].self, source: sourceDictionary["ArrayNumber"] as AnyObject?) { - case let .success(value): instance.arrayNumber = value + case let .success(value): result.arrayNumber = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "ArrayOfNumberOnly", actual: "\(source)")) } @@ -398,35 +393,33 @@ class Decoders { // Decoder for [ArrayTest] - Decoders.addDecoder(clazz: [ArrayTest].self) { (source: AnyObject) -> Decoded<[ArrayTest]> in - return Decoders.decode(clazz: [ArrayTest].self, source: source) + Decoders.addDecoder(clazz: [ArrayTest].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[ArrayTest]> in + return Decoders.decode(clazz: [ArrayTest].self, source: source, instance: instance) } // Decoder for ArrayTest - Decoders.addDecoder(clazz: ArrayTest.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: ArrayTest.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = ArrayTest() + let result = instance == nil ? ArrayTest() : instance as! ArrayTest switch Decoders.decodeOptional(clazz: [String].self, source: sourceDictionary["array_of_string"] as AnyObject?) { - case let .success(value): instance.arrayOfString = value + case let .success(value): result.arrayOfString = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: [[Int64]].self, source: sourceDictionary["array_array_of_integer"] as AnyObject?) { - case let .success(value): instance.arrayArrayOfInteger = value + case let .success(value): result.arrayArrayOfInteger = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: [[ReadOnlyFirst]].self, source: sourceDictionary["array_array_of_model"] as AnyObject?) { - case let .success(value): instance.arrayArrayOfModel = value + case let .success(value): result.arrayArrayOfModel = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "ArrayTest", actual: "\(source)")) } @@ -434,56 +427,51 @@ class Decoders { // Decoder for [Capitalization] - Decoders.addDecoder(clazz: [Capitalization].self) { (source: AnyObject) -> Decoded<[Capitalization]> in - return Decoders.decode(clazz: [Capitalization].self, source: source) + Decoders.addDecoder(clazz: [Capitalization].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Capitalization]> in + return Decoders.decode(clazz: [Capitalization].self, source: source, instance: instance) } // Decoder for Capitalization - Decoders.addDecoder(clazz: Capitalization.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Capitalization.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Capitalization() + let result = instance == nil ? Capitalization() : instance as! Capitalization switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["smallCamel"] as AnyObject?) { - case let .success(value): instance.smallCamel = value + case let .success(value): result.smallCamel = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["CapitalCamel"] as AnyObject?) { - case let .success(value): instance.capitalCamel = value + case let .success(value): result.capitalCamel = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["small_Snake"] as AnyObject?) { - case let .success(value): instance.smallSnake = value + case let .success(value): result.smallSnake = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["Capital_Snake"] as AnyObject?) { - case let .success(value): instance.capitalSnake = value + case let .success(value): result.capitalSnake = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["SCA_ETH_Flow_Points"] as AnyObject?) { - case let .success(value): instance.sCAETHFlowPoints = value + case let .success(value): result.sCAETHFlowPoints = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["ATT_NAME"] as AnyObject?) { - case let .success(value): instance.ATT_NAME = value + case let .success(value): result.ATT_NAME = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Capitalization", actual: "\(source)")) } @@ -491,35 +479,36 @@ class Decoders { // Decoder for [Cat] - Decoders.addDecoder(clazz: [Cat].self) { (source: AnyObject) -> Decoded<[Cat]> in - return Decoders.decode(clazz: [Cat].self, source: source) + Decoders.addDecoder(clazz: [Cat].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Cat]> in + return Decoders.decode(clazz: [Cat].self, source: source, instance: instance) } // Decoder for Cat - Decoders.addDecoder(clazz: Cat.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Cat.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Cat() + let result = instance == nil ? Cat() : instance as! Cat + if decoders["\(Animal.self)"] != nil { + _ = Decoders.decode(clazz: Animal.self, source: source, instance: result) + } switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["className"] as AnyObject?) { - case let .success(value): instance.className = value + case let .success(value): result.className = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["color"] as AnyObject?) { - case let .success(value): instance.color = value + case let .success(value): result.color = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Bool.self, source: sourceDictionary["declawed"] as AnyObject?) { - case let .success(value): instance.declawed = value + case let .success(value): result.declawed = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Cat", actual: "\(source)")) } @@ -527,28 +516,27 @@ class Decoders { // Decoder for [Category] - Decoders.addDecoder(clazz: [Category].self) { (source: AnyObject) -> Decoded<[Category]> in - return Decoders.decode(clazz: [Category].self, source: source) + Decoders.addDecoder(clazz: [Category].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Category]> in + return Decoders.decode(clazz: [Category].self, source: source, instance: instance) } // Decoder for Category - Decoders.addDecoder(clazz: Category.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Category.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Category() + let result = instance == nil ? Category() : instance as! Category switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["id"] as AnyObject?) { - case let .success(value): instance.id = value + case let .success(value): result.id = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["name"] as AnyObject?) { - case let .success(value): instance.name = value + case let .success(value): result.name = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Category", actual: "\(source)")) } @@ -556,21 +544,21 @@ class Decoders { // Decoder for [ClassModel] - Decoders.addDecoder(clazz: [ClassModel].self) { (source: AnyObject) -> Decoded<[ClassModel]> in - return Decoders.decode(clazz: [ClassModel].self, source: source) + Decoders.addDecoder(clazz: [ClassModel].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[ClassModel]> in + return Decoders.decode(clazz: [ClassModel].self, source: source, instance: instance) } // Decoder for ClassModel - Decoders.addDecoder(clazz: ClassModel.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: ClassModel.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = ClassModel() + let result = instance == nil ? ClassModel() : instance as! ClassModel switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["_class"] as AnyObject?) { - case let .success(value): instance._class = value + case let .success(value): result._class = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "ClassModel", actual: "\(source)")) } @@ -578,21 +566,21 @@ class Decoders { // Decoder for [Client] - Decoders.addDecoder(clazz: [Client].self) { (source: AnyObject) -> Decoded<[Client]> in - return Decoders.decode(clazz: [Client].self, source: source) + Decoders.addDecoder(clazz: [Client].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Client]> in + return Decoders.decode(clazz: [Client].self, source: source, instance: instance) } // Decoder for Client - Decoders.addDecoder(clazz: Client.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Client.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Client() + let result = instance == nil ? Client() : instance as! Client switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["client"] as AnyObject?) { - case let .success(value): instance.client = value + case let .success(value): result.client = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Client", actual: "\(source)")) } @@ -600,35 +588,36 @@ class Decoders { // Decoder for [Dog] - Decoders.addDecoder(clazz: [Dog].self) { (source: AnyObject) -> Decoded<[Dog]> in - return Decoders.decode(clazz: [Dog].self, source: source) + Decoders.addDecoder(clazz: [Dog].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Dog]> in + return Decoders.decode(clazz: [Dog].self, source: source, instance: instance) } // Decoder for Dog - Decoders.addDecoder(clazz: Dog.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Dog.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Dog() + let result = instance == nil ? Dog() : instance as! Dog + if decoders["\(Animal.self)"] != nil { + _ = Decoders.decode(clazz: Animal.self, source: source, instance: result) + } switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["className"] as AnyObject?) { - case let .success(value): instance.className = value + case let .success(value): result.className = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["color"] as AnyObject?) { - case let .success(value): instance.color = value + case let .success(value): result.color = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["breed"] as AnyObject?) { - case let .success(value): instance.breed = value + case let .success(value): result.breed = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Dog", actual: "\(source)")) } @@ -636,28 +625,27 @@ class Decoders { // Decoder for [EnumArrays] - Decoders.addDecoder(clazz: [EnumArrays].self) { (source: AnyObject) -> Decoded<[EnumArrays]> in - return Decoders.decode(clazz: [EnumArrays].self, source: source) + Decoders.addDecoder(clazz: [EnumArrays].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[EnumArrays]> in + return Decoders.decode(clazz: [EnumArrays].self, source: source, instance: instance) } // Decoder for EnumArrays - Decoders.addDecoder(clazz: EnumArrays.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: EnumArrays.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = EnumArrays() + let result = instance == nil ? EnumArrays() : instance as! EnumArrays switch Decoders.decodeOptional(clazz: EnumArrays.JustSymbol.self, source: sourceDictionary["just_symbol"] as AnyObject?) { - case let .success(value): instance.justSymbol = value + case let .success(value): result.justSymbol = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Array.self, source: sourceDictionary["array_enum"] as AnyObject?) { - case let .success(value): instance.arrayEnum = value + case let .success(value): result.arrayEnum = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "EnumArrays", actual: "\(source)")) } @@ -665,53 +653,50 @@ class Decoders { // Decoder for [EnumClass] - Decoders.addDecoder(clazz: [EnumClass].self) { (source: AnyObject) -> Decoded<[EnumClass]> in - return Decoders.decode(clazz: [EnumClass].self, source: source) + Decoders.addDecoder(clazz: [EnumClass].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[EnumClass]> in + return Decoders.decode(clazz: [EnumClass].self, source: source, instance: instance) } // Decoder for EnumClass - Decoders.addDecoder(clazz: EnumClass.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: EnumClass.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in //TODO: I don't think we need this anymore - return Decoders.decode(clazz: EnumClass.self, source: source) + return Decoders.decode(clazz: EnumClass.self, source: source, instance: instance) } // Decoder for [EnumTest] - Decoders.addDecoder(clazz: [EnumTest].self) { (source: AnyObject) -> Decoded<[EnumTest]> in - return Decoders.decode(clazz: [EnumTest].self, source: source) + Decoders.addDecoder(clazz: [EnumTest].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[EnumTest]> in + return Decoders.decode(clazz: [EnumTest].self, source: source, instance: instance) } // Decoder for EnumTest - Decoders.addDecoder(clazz: EnumTest.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: EnumTest.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = EnumTest() + let result = instance == nil ? EnumTest() : instance as! EnumTest switch Decoders.decodeOptional(clazz: EnumTest.EnumString.self, source: sourceDictionary["enum_string"] as AnyObject?) { - case let .success(value): instance.enumString = value + case let .success(value): result.enumString = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: EnumTest.EnumInteger.self, source: sourceDictionary["enum_integer"] as AnyObject?) { - case let .success(value): instance.enumInteger = value + case let .success(value): result.enumInteger = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: EnumTest.EnumNumber.self, source: sourceDictionary["enum_number"] as AnyObject?) { - case let .success(value): instance.enumNumber = value + case let .success(value): result.enumNumber = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: OuterEnum.self, source: sourceDictionary["outerEnum"] as AnyObject?) { - case let .success(value): instance.outerEnum = value + case let .success(value): result.outerEnum = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "EnumTest", actual: "\(source)")) } @@ -719,105 +704,93 @@ class Decoders { // Decoder for [FormatTest] - Decoders.addDecoder(clazz: [FormatTest].self) { (source: AnyObject) -> Decoded<[FormatTest]> in - return Decoders.decode(clazz: [FormatTest].self, source: source) + Decoders.addDecoder(clazz: [FormatTest].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[FormatTest]> in + return Decoders.decode(clazz: [FormatTest].self, source: source, instance: instance) } // Decoder for FormatTest - Decoders.addDecoder(clazz: FormatTest.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: FormatTest.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = FormatTest() + let result = instance == nil ? FormatTest() : instance as! FormatTest switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["integer"] as AnyObject?) { - case let .success(value): instance.integer = value + case let .success(value): result.integer = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["int32"] as AnyObject?) { - case let .success(value): instance.int32 = value + case let .success(value): result.int32 = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["int64"] as AnyObject?) { - case let .success(value): instance.int64 = value + case let .success(value): result.int64 = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Double.self, source: sourceDictionary["number"] as AnyObject?) { - case let .success(value): instance.number = value + case let .success(value): result.number = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Float.self, source: sourceDictionary["float"] as AnyObject?) { - case let .success(value): instance.float = value + case let .success(value): result.float = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Double.self, source: sourceDictionary["double"] as AnyObject?) { - case let .success(value): instance.double = value + case let .success(value): result.double = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["string"] as AnyObject?) { - case let .success(value): instance.string = value + case let .success(value): result.string = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Data.self, source: sourceDictionary["byte"] as AnyObject?) { - case let .success(value): instance.byte = value + case let .success(value): result.byte = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Data.self, source: sourceDictionary["binary"] as AnyObject?) { - case let .success(value): instance.binary = value + case let .success(value): result.binary = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: ISOFullDate.self, source: sourceDictionary["date"] as AnyObject?) { - case let .success(value): instance.date = value + case let .success(value): result.date = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Date.self, source: sourceDictionary["dateTime"] as AnyObject?) { - case let .success(value): instance.dateTime = value + case let .success(value): result.dateTime = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: UUID.self, source: sourceDictionary["uuid"] as AnyObject?) { - case let .success(value): instance.uuid = value + case let .success(value): result.uuid = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["password"] as AnyObject?) { - case let .success(value): instance.password = value + case let .success(value): result.password = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "FormatTest", actual: "\(source)")) } @@ -825,28 +798,27 @@ class Decoders { // Decoder for [HasOnlyReadOnly] - Decoders.addDecoder(clazz: [HasOnlyReadOnly].self) { (source: AnyObject) -> Decoded<[HasOnlyReadOnly]> in - return Decoders.decode(clazz: [HasOnlyReadOnly].self, source: source) + Decoders.addDecoder(clazz: [HasOnlyReadOnly].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[HasOnlyReadOnly]> in + return Decoders.decode(clazz: [HasOnlyReadOnly].self, source: source, instance: instance) } // Decoder for HasOnlyReadOnly - Decoders.addDecoder(clazz: HasOnlyReadOnly.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: HasOnlyReadOnly.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = HasOnlyReadOnly() + let result = instance == nil ? HasOnlyReadOnly() : instance as! HasOnlyReadOnly switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["bar"] as AnyObject?) { - case let .success(value): instance.bar = value + case let .success(value): result.bar = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["foo"] as AnyObject?) { - case let .success(value): instance.foo = value + case let .success(value): result.foo = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "HasOnlyReadOnly", actual: "\(source)")) } @@ -854,21 +826,21 @@ class Decoders { // Decoder for [List] - Decoders.addDecoder(clazz: [List].self) { (source: AnyObject) -> Decoded<[List]> in - return Decoders.decode(clazz: [List].self, source: source) + Decoders.addDecoder(clazz: [List].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[List]> in + return Decoders.decode(clazz: [List].self, source: source, instance: instance) } // Decoder for List - Decoders.addDecoder(clazz: List.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: List.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = List() + let result = instance == nil ? List() : instance as! List switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["123-list"] as AnyObject?) { - case let .success(value): instance._123List = value + case let .success(value): result._123List = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "List", actual: "\(source)")) } @@ -876,28 +848,27 @@ class Decoders { // Decoder for [MapTest] - Decoders.addDecoder(clazz: [MapTest].self) { (source: AnyObject) -> Decoded<[MapTest]> in - return Decoders.decode(clazz: [MapTest].self, source: source) + Decoders.addDecoder(clazz: [MapTest].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[MapTest]> in + return Decoders.decode(clazz: [MapTest].self, source: source, instance: instance) } // Decoder for MapTest - Decoders.addDecoder(clazz: MapTest.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: MapTest.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = MapTest() + let result = instance == nil ? MapTest() : instance as! MapTest switch Decoders.decodeOptional(clazz: [String:[String:String]].self, source: sourceDictionary["map_map_of_string"] as AnyObject?) { - case let .success(value): instance.mapMapOfString = value + case let .success(value): result.mapMapOfString = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: MapTest.MapOfEnumString.self, source: sourceDictionary["map_of_enum_string"] as AnyObject?) { /* - case let .success(value): instance.mapOfEnumString = value + case let .success(value): result.mapOfEnumString = value case let .failure(error): return .failure(error) */ default: break //TODO: handle enum map scenario } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "MapTest", actual: "\(source)")) } @@ -905,35 +876,33 @@ class Decoders { // Decoder for [MixedPropertiesAndAdditionalPropertiesClass] - Decoders.addDecoder(clazz: [MixedPropertiesAndAdditionalPropertiesClass].self) { (source: AnyObject) -> Decoded<[MixedPropertiesAndAdditionalPropertiesClass]> in - return Decoders.decode(clazz: [MixedPropertiesAndAdditionalPropertiesClass].self, source: source) + Decoders.addDecoder(clazz: [MixedPropertiesAndAdditionalPropertiesClass].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[MixedPropertiesAndAdditionalPropertiesClass]> in + return Decoders.decode(clazz: [MixedPropertiesAndAdditionalPropertiesClass].self, source: source, instance: instance) } // Decoder for MixedPropertiesAndAdditionalPropertiesClass - Decoders.addDecoder(clazz: MixedPropertiesAndAdditionalPropertiesClass.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: MixedPropertiesAndAdditionalPropertiesClass.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = MixedPropertiesAndAdditionalPropertiesClass() + let result = instance == nil ? MixedPropertiesAndAdditionalPropertiesClass() : instance as! MixedPropertiesAndAdditionalPropertiesClass switch Decoders.decodeOptional(clazz: UUID.self, source: sourceDictionary["uuid"] as AnyObject?) { - case let .success(value): instance.uuid = value + case let .success(value): result.uuid = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Date.self, source: sourceDictionary["dateTime"] as AnyObject?) { - case let .success(value): instance.dateTime = value + case let .success(value): result.dateTime = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: [String:Animal].self, source: sourceDictionary["map"] as AnyObject?) { - case let .success(value): instance.map = value + case let .success(value): result.map = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "MixedPropertiesAndAdditionalPropertiesClass", actual: "\(source)")) } @@ -941,28 +910,27 @@ class Decoders { // Decoder for [Model200Response] - Decoders.addDecoder(clazz: [Model200Response].self) { (source: AnyObject) -> Decoded<[Model200Response]> in - return Decoders.decode(clazz: [Model200Response].self, source: source) + Decoders.addDecoder(clazz: [Model200Response].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Model200Response]> in + return Decoders.decode(clazz: [Model200Response].self, source: source, instance: instance) } // Decoder for Model200Response - Decoders.addDecoder(clazz: Model200Response.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Model200Response.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Model200Response() + let result = instance == nil ? Model200Response() : instance as! Model200Response switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["name"] as AnyObject?) { - case let .success(value): instance.name = value + case let .success(value): result.name = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["class"] as AnyObject?) { - case let .success(value): instance._class = value + case let .success(value): result._class = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Model200Response", actual: "\(source)")) } @@ -970,42 +938,39 @@ class Decoders { // Decoder for [Name] - Decoders.addDecoder(clazz: [Name].self) { (source: AnyObject) -> Decoded<[Name]> in - return Decoders.decode(clazz: [Name].self, source: source) + Decoders.addDecoder(clazz: [Name].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Name]> in + return Decoders.decode(clazz: [Name].self, source: source, instance: instance) } // Decoder for Name - Decoders.addDecoder(clazz: Name.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Name.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Name() + let result = instance == nil ? Name() : instance as! Name switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["name"] as AnyObject?) { - case let .success(value): instance.name = value + case let .success(value): result.name = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["snake_case"] as AnyObject?) { - case let .success(value): instance.snakeCase = value + case let .success(value): result.snakeCase = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["property"] as AnyObject?) { - case let .success(value): instance.property = value + case let .success(value): result.property = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["123Number"] as AnyObject?) { - case let .success(value): instance._123Number = value + case let .success(value): result._123Number = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Name", actual: "\(source)")) } @@ -1013,21 +978,21 @@ class Decoders { // Decoder for [NumberOnly] - Decoders.addDecoder(clazz: [NumberOnly].self) { (source: AnyObject) -> Decoded<[NumberOnly]> in - return Decoders.decode(clazz: [NumberOnly].self, source: source) + Decoders.addDecoder(clazz: [NumberOnly].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[NumberOnly]> in + return Decoders.decode(clazz: [NumberOnly].self, source: source, instance: instance) } // Decoder for NumberOnly - Decoders.addDecoder(clazz: NumberOnly.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: NumberOnly.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = NumberOnly() + let result = instance == nil ? NumberOnly() : instance as! NumberOnly switch Decoders.decodeOptional(clazz: Double.self, source: sourceDictionary["JustNumber"] as AnyObject?) { - case let .success(value): instance.justNumber = value + case let .success(value): result.justNumber = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "NumberOnly", actual: "\(source)")) } @@ -1035,56 +1000,51 @@ class Decoders { // Decoder for [Order] - Decoders.addDecoder(clazz: [Order].self) { (source: AnyObject) -> Decoded<[Order]> in - return Decoders.decode(clazz: [Order].self, source: source) + Decoders.addDecoder(clazz: [Order].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Order]> in + return Decoders.decode(clazz: [Order].self, source: source, instance: instance) } // Decoder for Order - Decoders.addDecoder(clazz: Order.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Order.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Order() + let result = instance == nil ? Order() : instance as! Order switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["id"] as AnyObject?) { - case let .success(value): instance.id = value + case let .success(value): result.id = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["petId"] as AnyObject?) { - case let .success(value): instance.petId = value + case let .success(value): result.petId = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["quantity"] as AnyObject?) { - case let .success(value): instance.quantity = value + case let .success(value): result.quantity = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Date.self, source: sourceDictionary["shipDate"] as AnyObject?) { - case let .success(value): instance.shipDate = value + case let .success(value): result.shipDate = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Order.Status.self, source: sourceDictionary["status"] as AnyObject?) { - case let .success(value): instance.status = value + case let .success(value): result.status = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Bool.self, source: sourceDictionary["complete"] as AnyObject?) { - case let .success(value): instance.complete = value + case let .success(value): result.complete = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Order", actual: "\(source)")) } @@ -1092,67 +1052,62 @@ class Decoders { // Decoder for [OuterEnum] - Decoders.addDecoder(clazz: [OuterEnum].self) { (source: AnyObject) -> Decoded<[OuterEnum]> in - return Decoders.decode(clazz: [OuterEnum].self, source: source) + Decoders.addDecoder(clazz: [OuterEnum].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[OuterEnum]> in + return Decoders.decode(clazz: [OuterEnum].self, source: source, instance: instance) } // Decoder for OuterEnum - Decoders.addDecoder(clazz: OuterEnum.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: OuterEnum.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in //TODO: I don't think we need this anymore - return Decoders.decode(clazz: OuterEnum.self, source: source) + return Decoders.decode(clazz: OuterEnum.self, source: source, instance: instance) } // Decoder for [Pet] - Decoders.addDecoder(clazz: [Pet].self) { (source: AnyObject) -> Decoded<[Pet]> in - return Decoders.decode(clazz: [Pet].self, source: source) + Decoders.addDecoder(clazz: [Pet].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Pet]> in + return Decoders.decode(clazz: [Pet].self, source: source, instance: instance) } // Decoder for Pet - Decoders.addDecoder(clazz: Pet.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Pet.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Pet() + let result = instance == nil ? Pet() : instance as! Pet switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["id"] as AnyObject?) { - case let .success(value): instance.id = value + case let .success(value): result.id = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Category.self, source: sourceDictionary["category"] as AnyObject?) { - case let .success(value): instance.category = value + case let .success(value): result.category = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["name"] as AnyObject?) { - case let .success(value): instance.name = value + case let .success(value): result.name = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: [String].self, source: sourceDictionary["photoUrls"] as AnyObject?) { - case let .success(value): instance.photoUrls = value + case let .success(value): result.photoUrls = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: [Tag].self, source: sourceDictionary["tags"] as AnyObject?) { - case let .success(value): instance.tags = value + case let .success(value): result.tags = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Pet.Status.self, source: sourceDictionary["status"] as AnyObject?) { - case let .success(value): instance.status = value + case let .success(value): result.status = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Pet", actual: "\(source)")) } @@ -1160,28 +1115,27 @@ class Decoders { // Decoder for [ReadOnlyFirst] - Decoders.addDecoder(clazz: [ReadOnlyFirst].self) { (source: AnyObject) -> Decoded<[ReadOnlyFirst]> in - return Decoders.decode(clazz: [ReadOnlyFirst].self, source: source) + Decoders.addDecoder(clazz: [ReadOnlyFirst].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[ReadOnlyFirst]> in + return Decoders.decode(clazz: [ReadOnlyFirst].self, source: source, instance: instance) } // Decoder for ReadOnlyFirst - Decoders.addDecoder(clazz: ReadOnlyFirst.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: ReadOnlyFirst.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = ReadOnlyFirst() + let result = instance == nil ? ReadOnlyFirst() : instance as! ReadOnlyFirst switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["bar"] as AnyObject?) { - case let .success(value): instance.bar = value + case let .success(value): result.bar = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["baz"] as AnyObject?) { - case let .success(value): instance.baz = value + case let .success(value): result.baz = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "ReadOnlyFirst", actual: "\(source)")) } @@ -1189,21 +1143,21 @@ class Decoders { // Decoder for [Return] - Decoders.addDecoder(clazz: [Return].self) { (source: AnyObject) -> Decoded<[Return]> in - return Decoders.decode(clazz: [Return].self, source: source) + Decoders.addDecoder(clazz: [Return].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Return]> in + return Decoders.decode(clazz: [Return].self, source: source, instance: instance) } // Decoder for Return - Decoders.addDecoder(clazz: Return.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Return.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Return() + let result = instance == nil ? Return() : instance as! Return switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["return"] as AnyObject?) { - case let .success(value): instance._return = value + case let .success(value): result._return = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Return", actual: "\(source)")) } @@ -1211,21 +1165,21 @@ class Decoders { // Decoder for [SpecialModelName] - Decoders.addDecoder(clazz: [SpecialModelName].self) { (source: AnyObject) -> Decoded<[SpecialModelName]> in - return Decoders.decode(clazz: [SpecialModelName].self, source: source) + Decoders.addDecoder(clazz: [SpecialModelName].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[SpecialModelName]> in + return Decoders.decode(clazz: [SpecialModelName].self, source: source, instance: instance) } // Decoder for SpecialModelName - Decoders.addDecoder(clazz: SpecialModelName.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: SpecialModelName.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = SpecialModelName() + let result = instance == nil ? SpecialModelName() : instance as! SpecialModelName switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["$special[property.name]"] as AnyObject?) { - case let .success(value): instance.specialPropertyName = value + case let .success(value): result.specialPropertyName = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "SpecialModelName", actual: "\(source)")) } @@ -1233,28 +1187,27 @@ class Decoders { // Decoder for [Tag] - Decoders.addDecoder(clazz: [Tag].self) { (source: AnyObject) -> Decoded<[Tag]> in - return Decoders.decode(clazz: [Tag].self, source: source) + Decoders.addDecoder(clazz: [Tag].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Tag]> in + return Decoders.decode(clazz: [Tag].self, source: source, instance: instance) } // Decoder for Tag - Decoders.addDecoder(clazz: Tag.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Tag.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Tag() + let result = instance == nil ? Tag() : instance as! Tag switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["id"] as AnyObject?) { - case let .success(value): instance.id = value + case let .success(value): result.id = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["name"] as AnyObject?) { - case let .success(value): instance.name = value + case let .success(value): result.name = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Tag", actual: "\(source)")) } @@ -1262,70 +1215,63 @@ class Decoders { // Decoder for [User] - Decoders.addDecoder(clazz: [User].self) { (source: AnyObject) -> Decoded<[User]> in - return Decoders.decode(clazz: [User].self, source: source) + Decoders.addDecoder(clazz: [User].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[User]> in + return Decoders.decode(clazz: [User].self, source: source, instance: instance) } // Decoder for User - Decoders.addDecoder(clazz: User.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: User.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = User() + let result = instance == nil ? User() : instance as! User switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["id"] as AnyObject?) { - case let .success(value): instance.id = value + case let .success(value): result.id = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["username"] as AnyObject?) { - case let .success(value): instance.username = value + case let .success(value): result.username = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["firstName"] as AnyObject?) { - case let .success(value): instance.firstName = value + case let .success(value): result.firstName = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["lastName"] as AnyObject?) { - case let .success(value): instance.lastName = value + case let .success(value): result.lastName = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["email"] as AnyObject?) { - case let .success(value): instance.email = value + case let .success(value): result.email = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["password"] as AnyObject?) { - case let .success(value): instance.password = value + case let .success(value): result.password = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["phone"] as AnyObject?) { - case let .success(value): instance.phone = value + case let .success(value): result.phone = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["userStatus"] as AnyObject?) { - case let .success(value): instance.userStatus = value + case let .success(value): result.userStatus = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "User", actual: "\(source)")) } diff --git a/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/APIs/FakeAPI.swift b/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/APIs/FakeAPI.swift index 58e2f2b7b8b..5139fb433a8 100644 --- a/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/APIs/FakeAPI.swift @@ -47,9 +47,9 @@ open class FakeAPI: APIBase { To test \"client\" model - PATCH /fake - To test \"client\" model - - examples: [{contentType=application/json, example={ + - examples: [{example={ "client" : "aeiou" -}}] +}, contentType=application/json}] - parameter body: (body) client model diff --git a/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/APIs/Fake_classname_tags123API.swift b/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/APIs/Fake_classname_tags123API.swift index dda46ead7f0..5197283948d 100644 --- a/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/APIs/Fake_classname_tags123API.swift +++ b/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/APIs/Fake_classname_tags123API.swift @@ -46,9 +46,9 @@ open class Fake_classname_tags123API: APIBase { /** To test class name in snake case - PATCH /fake_classname_test - - examples: [{contentType=application/json, example={ + - examples: [{example={ "client" : "aeiou" -}}] +}, contentType=application/json}] - parameter body: (body) client model diff --git a/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift b/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift index 5c457e4eb02..06fdd448f52 100644 --- a/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift +++ b/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/APIs/PetAPI.swift @@ -181,7 +181,7 @@ open class PetAPI: APIBase { - OAuth: - type: oauth2 - name: petstore_auth - - examples: [{contentType=application/xml, example= + - examples: [{example= 123456789 doggie @@ -190,21 +190,21 @@ open class PetAPI: APIBase { aeiou -}, {contentType=application/json, example=[ { - "photoUrls" : [ "aeiou" ], - "name" : "doggie", +, contentType=application/xml}, {example=[ { + "tags" : [ { + "id" : 1, + "name" : "aeiou" + } ], "id" : 0, "category" : { - "name" : "aeiou", - "id" : 6 + "id" : 6, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 1 - } ], - "status" : "available" -} ]}] - - examples: [{contentType=application/xml, example= + "status" : "available", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +} ], contentType=application/json}] + - examples: [{example= 123456789 doggie @@ -213,20 +213,20 @@ open class PetAPI: APIBase { aeiou -}, {contentType=application/json, example=[ { - "photoUrls" : [ "aeiou" ], - "name" : "doggie", +, contentType=application/xml}, {example=[ { + "tags" : [ { + "id" : 1, + "name" : "aeiou" + } ], "id" : 0, "category" : { - "name" : "aeiou", - "id" : 6 + "id" : 6, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 1 - } ], - "status" : "available" -} ]}] + "status" : "available", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +} ], contentType=application/json}] - parameter status: (query) Status values that need to be considered for filter @@ -287,7 +287,7 @@ open class PetAPI: APIBase { - OAuth: - type: oauth2 - name: petstore_auth - - examples: [{contentType=application/xml, example= + - examples: [{example= 123456789 doggie @@ -296,21 +296,21 @@ open class PetAPI: APIBase { aeiou -}, {contentType=application/json, example=[ { - "photoUrls" : [ "aeiou" ], - "name" : "doggie", +, contentType=application/xml}, {example=[ { + "tags" : [ { + "id" : 1, + "name" : "aeiou" + } ], "id" : 0, "category" : { - "name" : "aeiou", - "id" : 6 + "id" : 6, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 1 - } ], - "status" : "available" -} ]}] - - examples: [{contentType=application/xml, example= + "status" : "available", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +} ], contentType=application/json}] + - examples: [{example= 123456789 doggie @@ -319,20 +319,20 @@ open class PetAPI: APIBase { aeiou -}, {contentType=application/json, example=[ { - "photoUrls" : [ "aeiou" ], - "name" : "doggie", +, contentType=application/xml}, {example=[ { + "tags" : [ { + "id" : 1, + "name" : "aeiou" + } ], "id" : 0, "category" : { - "name" : "aeiou", - "id" : 6 + "id" : 6, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 1 - } ], - "status" : "available" -} ]}] + "status" : "available", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +} ], contentType=application/json}] - parameter tags: (query) Tags to filter by @@ -393,7 +393,7 @@ open class PetAPI: APIBase { - API Key: - type: apiKey api_key - name: api_key - - examples: [{contentType=application/xml, example= + - examples: [{example= 123456789 doggie @@ -402,21 +402,21 @@ open class PetAPI: APIBase { aeiou -}, {contentType=application/json, example={ - "photoUrls" : [ "aeiou" ], - "name" : "doggie", +, contentType=application/xml}, {example={ + "tags" : [ { + "id" : 1, + "name" : "aeiou" + } ], "id" : 0, "category" : { - "name" : "aeiou", - "id" : 6 + "id" : 6, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 1 - } ], - "status" : "available" -}}] - - examples: [{contentType=application/xml, example= + "status" : "available", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +}, contentType=application/json}] + - examples: [{example= 123456789 doggie @@ -425,20 +425,20 @@ open class PetAPI: APIBase { aeiou -}, {contentType=application/json, example={ - "photoUrls" : [ "aeiou" ], - "name" : "doggie", +, contentType=application/xml}, {example={ + "tags" : [ { + "id" : 1, + "name" : "aeiou" + } ], "id" : 0, "category" : { - "name" : "aeiou", - "id" : 6 + "id" : 6, + "name" : "aeiou" }, - "tags" : [ { - "name" : "aeiou", - "id" : 1 - } ], - "status" : "available" -}}] + "status" : "available", + "name" : "doggie", + "photoUrls" : [ "aeiou" ] +}, contentType=application/json}] - parameter petId: (path) ID of pet to return @@ -628,11 +628,11 @@ open class PetAPI: APIBase { - OAuth: - type: oauth2 - name: petstore_auth - - examples: [{contentType=application/json, example={ + - examples: [{example={ + "message" : "aeiou", "code" : 0, - "type" : "aeiou", - "message" : "aeiou" -}}] + "type" : "aeiou" +}, contentType=application/json}] - parameter petId: (path) ID of pet to update - parameter additionalMetadata: (form) Additional data to pass to server (optional) diff --git a/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift b/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift index 045661cc371..5a385423ecc 100644 --- a/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/APIs/StoreAPI.swift @@ -103,9 +103,9 @@ open class StoreAPI: APIBase { - API Key: - type: apiKey api_key - name: api_key - - examples: [{contentType=application/json, example={ + - examples: [{example={ "key" : 0 -}}] +}, contentType=application/json}] - returns: RequestBuilder<[String:Int32]> */ @@ -158,36 +158,36 @@ open class StoreAPI: APIBase { Find purchase order by ID - GET /store/order/{order_id} - For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - - examples: [{contentType=application/xml, example= + - examples: [{example= 123456789 123456789 123 2000-01-23T04:56:07.000Z aeiou true -}, {contentType=application/json, example={ - "petId" : 6, - "quantity" : 1, +, contentType=application/xml}, {example={ "id" : 0, - "shipDate" : "2000-01-23T04:56:07.000+00:00", + "petId" : 6, "complete" : false, - "status" : "placed" -}}] - - examples: [{contentType=application/xml, example= + "status" : "placed", + "quantity" : 1, + "shipDate" : "2000-01-23T04:56:07.000+00:00" +}, contentType=application/json}] + - examples: [{example= 123456789 123456789 123 2000-01-23T04:56:07.000Z aeiou true -}, {contentType=application/json, example={ - "petId" : 6, - "quantity" : 1, +, contentType=application/xml}, {example={ "id" : 0, - "shipDate" : "2000-01-23T04:56:07.000+00:00", + "petId" : 6, "complete" : false, - "status" : "placed" -}}] + "status" : "placed", + "quantity" : 1, + "shipDate" : "2000-01-23T04:56:07.000+00:00" +}, contentType=application/json}] - parameter orderId: (path) ID of pet that needs to be fetched @@ -243,36 +243,36 @@ open class StoreAPI: APIBase { Place an order for a pet - POST /store/order - - - examples: [{contentType=application/xml, example= + - examples: [{example= 123456789 123456789 123 2000-01-23T04:56:07.000Z aeiou true -}, {contentType=application/json, example={ - "petId" : 6, - "quantity" : 1, +, contentType=application/xml}, {example={ "id" : 0, - "shipDate" : "2000-01-23T04:56:07.000+00:00", + "petId" : 6, "complete" : false, - "status" : "placed" -}}] - - examples: [{contentType=application/xml, example= + "status" : "placed", + "quantity" : 1, + "shipDate" : "2000-01-23T04:56:07.000+00:00" +}, contentType=application/json}] + - examples: [{example= 123456789 123456789 123 2000-01-23T04:56:07.000Z aeiou true -}, {contentType=application/json, example={ - "petId" : 6, - "quantity" : 1, +, contentType=application/xml}, {example={ "id" : 0, - "shipDate" : "2000-01-23T04:56:07.000+00:00", + "petId" : 6, "complete" : false, - "status" : "placed" -}}] + "status" : "placed", + "quantity" : 1, + "shipDate" : "2000-01-23T04:56:07.000+00:00" +}, contentType=application/json}] - parameter body: (body) order placed for purchasing the pet diff --git a/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift b/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift index a2a0cd23970..420bdfb2eca 100644 --- a/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift +++ b/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/APIs/UserAPI.swift @@ -264,7 +264,7 @@ open class UserAPI: APIBase { Get user by user name - GET /user/{username} - - - examples: [{contentType=application/xml, example= + - examples: [{example= 123456789 aeiou aeiou @@ -273,17 +273,17 @@ open class UserAPI: APIBase { aeiou aeiou 123 -}, {contentType=application/json, example={ - "firstName" : "aeiou", - "lastName" : "aeiou", - "password" : "aeiou", - "userStatus" : 6, - "phone" : "aeiou", +, contentType=application/xml}, {example={ "id" : 0, + "lastName" : "aeiou", + "phone" : "aeiou", + "username" : "aeiou", "email" : "aeiou", - "username" : "aeiou" -}}] - - examples: [{contentType=application/xml, example= + "userStatus" : 6, + "firstName" : "aeiou", + "password" : "aeiou" +}, contentType=application/json}] + - examples: [{example= 123456789 aeiou aeiou @@ -292,16 +292,16 @@ open class UserAPI: APIBase { aeiou aeiou 123 -}, {contentType=application/json, example={ - "firstName" : "aeiou", - "lastName" : "aeiou", - "password" : "aeiou", - "userStatus" : 6, - "phone" : "aeiou", +, contentType=application/xml}, {example={ "id" : 0, + "lastName" : "aeiou", + "phone" : "aeiou", + "username" : "aeiou", "email" : "aeiou", - "username" : "aeiou" -}}] + "userStatus" : 6, + "firstName" : "aeiou", + "password" : "aeiou" +}, contentType=application/json}] - parameter username: (path) The name that needs to be fetched. Use user1 for testing. @@ -361,8 +361,8 @@ open class UserAPI: APIBase { - - responseHeaders: [X-Rate-Limit(Int32), X-Expires-After(Date)] - responseHeaders: [X-Rate-Limit(Int32), X-Expires-After(Date)] - - examples: [{contentType=application/xml, example=aeiou}, {contentType=application/json, example="aeiou"}] - - examples: [{contentType=application/xml, example=aeiou}, {contentType=application/json, example="aeiou"}] + - examples: [{example=aeiou, contentType=application/xml}, {example="aeiou", contentType=application/json}] + - examples: [{example=aeiou, contentType=application/xml}, {example="aeiou", contentType=application/json}] - parameter username: (query) The user name for login - parameter password: (query) The password for login in clear text diff --git a/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/AlamofireImplementations.swift b/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/AlamofireImplementations.swift index 69a80df05d2..8fe9e375677 100644 --- a/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/AlamofireImplementations.swift +++ b/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/AlamofireImplementations.swift @@ -197,7 +197,7 @@ open class AlamofireRequestBuilder: RequestBuilder { return } if let json: Any = response.result.value { - let decoded = Decoders.decode(clazz: T.self, source: json as AnyObject) + let decoded = Decoders.decode(clazz: T.self, source: json as AnyObject, instance: nil) switch decoded { case let .success(object): completion(Response(response: response.response!, body: object), nil) case let .failure(error): completion(nil, ErrorResponse.DecodeError(response: response.data, decodeError: error)) diff --git a/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/Models.swift b/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/Models.swift index d7c5b457005..2dd4a72e0c4 100644 --- a/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/Models.swift +++ b/samples/client/petstore/swift3/rxswift/PetstoreClient/Classes/Swaggers/Models.swift @@ -60,17 +60,16 @@ public enum DecodeError { private var once = Int() class Decoders { - static fileprivate var decoders = Dictionary AnyObject)>() + static fileprivate var decoders = Dictionary AnyObject)>() - - static func addDecoder(clazz: T.Type, decoder: @escaping ((AnyObject) -> Decoded)) { + static func addDecoder(clazz: T.Type, decoder: @escaping ((AnyObject, AnyObject?) -> Decoded)) { let key = "\(T.self)" - decoders[key] = { decoder($0) as AnyObject } + decoders[key] = { decoder($0, $1) as AnyObject } } static func decode(clazz: T.Type, discriminator: String, source: AnyObject) -> Decoded { let key = discriminator - if let decoder = decoders[key], let value = decoder(source) as? Decoded { + if let decoder = decoders[key], let value = decoder(source, nil) as? Decoded { return value } else { return .failure(.typeMismatch(expected: String(describing: clazz), actual: String(describing: source))) @@ -81,7 +80,7 @@ class Decoders { if let sourceArray = source as? [AnyObject] { var values = [T]() for sourceValue in sourceArray { - switch Decoders.decode(clazz: T.self, source: sourceValue) { + switch Decoders.decode(clazz: T.self, source: sourceValue, instance: nil) { case let .success(value): values.append(value) case let .failure(error): @@ -98,7 +97,7 @@ class Decoders { if let sourceDictionary = source as? [Key: AnyObject] { var dictionary = [Key:T]() for (key, value) in sourceDictionary { - switch Decoders.decode(clazz: T.self, source: value) { + switch Decoders.decode(clazz: T.self, source: value, instance: nil) { case let .success(value): dictionary[key] = value case let .failure(error): @@ -124,7 +123,7 @@ class Decoders { } } - static func decode(clazz: T.Type, source: AnyObject) -> Decoded { + static func decode(clazz: T.Type, source: AnyObject, instance: AnyObject?) -> Decoded { initialize() if let value = source.int32Value as? T, source is NSNumber, T.self is Int32.Type { return .success(value) @@ -143,7 +142,7 @@ class Decoders { } let key = "\(T.self)" - if let decoder = decoders[key], let value = decoder(source) as? Decoded { + if let decoder = decoders[key], let value = decoder(source, instance) as? Decoded { return value } else { return .failure(.typeMismatch(expected: String(describing: clazz), actual: String(describing: source))) @@ -157,7 +156,7 @@ class Decoders { static func decodeOptional(clazz: T.Type, source: AnyObject?) -> Decoded { if let source = source, !(source is NSNull) { - switch Decoders.decode(clazz: clazz, source: source) { + switch Decoders.decode(clazz: clazz, source: source, instance: nil) { case let .success(value): return .success(value) case let .failure(error): return .failure(error) } @@ -170,7 +169,7 @@ class Decoders { if let source = source as? [AnyObject] { var values = [T]() for sourceValue in source { - switch Decoders.decode(clazz: T.self, source: sourceValue) { + switch Decoders.decode(clazz: T.self, source: sourceValue, instance: nil) { case let .success(value): values.append(value) case let .failure(error): return .failure(error) } @@ -185,7 +184,7 @@ class Decoders { if let sourceDictionary = source as? [Key: AnyObject] { var dictionary = [Key:T]() for (key, value) in sourceDictionary { - switch Decoders.decode(clazz: T.self, source: value) { + switch Decoders.decode(clazz: T.self, source: value, instance: nil) { case let .success(value): dictionary[key] = value case let .failure(error): return .failure(error) } @@ -223,7 +222,7 @@ class Decoders { return formatter } // Decoder for Date - Decoders.addDecoder(clazz: Date.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Date.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceString = source as? String { for formatter in formatters { if let date = formatter.date(from: sourceString) { @@ -243,7 +242,7 @@ class Decoders { } // Decoder for ISOFullDate - Decoders.addDecoder(clazz: ISOFullDate.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: ISOFullDate.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let string = source as? String, let isoDate = ISOFullDate.from(string: string) { return .success(isoDate) @@ -253,28 +252,27 @@ class Decoders { } // Decoder for [AdditionalPropertiesClass] - Decoders.addDecoder(clazz: [AdditionalPropertiesClass].self) { (source: AnyObject) -> Decoded<[AdditionalPropertiesClass]> in - return Decoders.decode(clazz: [AdditionalPropertiesClass].self, source: source) + Decoders.addDecoder(clazz: [AdditionalPropertiesClass].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[AdditionalPropertiesClass]> in + return Decoders.decode(clazz: [AdditionalPropertiesClass].self, source: source, instance: instance) } // Decoder for AdditionalPropertiesClass - Decoders.addDecoder(clazz: AdditionalPropertiesClass.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: AdditionalPropertiesClass.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = AdditionalPropertiesClass() + let result = instance == nil ? AdditionalPropertiesClass() : instance as! AdditionalPropertiesClass switch Decoders.decodeOptional(clazz: [String:String].self, source: sourceDictionary["map_property"] as AnyObject?) { - case let .success(value): instance.mapProperty = value + case let .success(value): result.mapProperty = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: [String:[String:String]].self, source: sourceDictionary["map_of_map_property"] as AnyObject?) { - case let .success(value): instance.mapOfMapProperty = value + case let .success(value): result.mapOfMapProperty = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "AdditionalPropertiesClass", actual: "\(source)")) } @@ -282,32 +280,31 @@ class Decoders { // Decoder for [Animal] - Decoders.addDecoder(clazz: [Animal].self) { (source: AnyObject) -> Decoded<[Animal]> in - return Decoders.decode(clazz: [Animal].self, source: source) + Decoders.addDecoder(clazz: [Animal].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Animal]> in + return Decoders.decode(clazz: [Animal].self, source: source, instance: instance) } // Decoder for Animal - Decoders.addDecoder(clazz: Animal.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Animal.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { // Check discriminator to support inheritance - if let discriminator = sourceDictionary["className"] as? String, discriminator != "Animal"{ + if let discriminator = sourceDictionary["className"] as? String, instance == nil && discriminator != "Animal"{ return Decoders.decode(clazz: Animal.self, discriminator: discriminator, source: source) } - let instance = Animal() + let result = instance == nil ? Animal() : instance as! Animal switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["className"] as AnyObject?) { - case let .success(value): instance.className = value + case let .success(value): result.className = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["color"] as AnyObject?) { - case let .success(value): instance.color = value + case let .success(value): result.color = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Animal", actual: "\(source)")) } @@ -318,35 +315,33 @@ class Decoders { // Decoder for [ApiResponse] - Decoders.addDecoder(clazz: [ApiResponse].self) { (source: AnyObject) -> Decoded<[ApiResponse]> in - return Decoders.decode(clazz: [ApiResponse].self, source: source) + Decoders.addDecoder(clazz: [ApiResponse].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[ApiResponse]> in + return Decoders.decode(clazz: [ApiResponse].self, source: source, instance: instance) } // Decoder for ApiResponse - Decoders.addDecoder(clazz: ApiResponse.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: ApiResponse.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = ApiResponse() + let result = instance == nil ? ApiResponse() : instance as! ApiResponse switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["code"] as AnyObject?) { - case let .success(value): instance.code = value + case let .success(value): result.code = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["type"] as AnyObject?) { - case let .success(value): instance.type = value + case let .success(value): result.type = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["message"] as AnyObject?) { - case let .success(value): instance.message = value + case let .success(value): result.message = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "ApiResponse", actual: "\(source)")) } @@ -354,21 +349,21 @@ class Decoders { // Decoder for [ArrayOfArrayOfNumberOnly] - Decoders.addDecoder(clazz: [ArrayOfArrayOfNumberOnly].self) { (source: AnyObject) -> Decoded<[ArrayOfArrayOfNumberOnly]> in - return Decoders.decode(clazz: [ArrayOfArrayOfNumberOnly].self, source: source) + Decoders.addDecoder(clazz: [ArrayOfArrayOfNumberOnly].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[ArrayOfArrayOfNumberOnly]> in + return Decoders.decode(clazz: [ArrayOfArrayOfNumberOnly].self, source: source, instance: instance) } // Decoder for ArrayOfArrayOfNumberOnly - Decoders.addDecoder(clazz: ArrayOfArrayOfNumberOnly.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: ArrayOfArrayOfNumberOnly.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = ArrayOfArrayOfNumberOnly() + let result = instance == nil ? ArrayOfArrayOfNumberOnly() : instance as! ArrayOfArrayOfNumberOnly switch Decoders.decodeOptional(clazz: [[Double]].self, source: sourceDictionary["ArrayArrayNumber"] as AnyObject?) { - case let .success(value): instance.arrayArrayNumber = value + case let .success(value): result.arrayArrayNumber = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "ArrayOfArrayOfNumberOnly", actual: "\(source)")) } @@ -376,21 +371,21 @@ class Decoders { // Decoder for [ArrayOfNumberOnly] - Decoders.addDecoder(clazz: [ArrayOfNumberOnly].self) { (source: AnyObject) -> Decoded<[ArrayOfNumberOnly]> in - return Decoders.decode(clazz: [ArrayOfNumberOnly].self, source: source) + Decoders.addDecoder(clazz: [ArrayOfNumberOnly].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[ArrayOfNumberOnly]> in + return Decoders.decode(clazz: [ArrayOfNumberOnly].self, source: source, instance: instance) } // Decoder for ArrayOfNumberOnly - Decoders.addDecoder(clazz: ArrayOfNumberOnly.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: ArrayOfNumberOnly.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = ArrayOfNumberOnly() + let result = instance == nil ? ArrayOfNumberOnly() : instance as! ArrayOfNumberOnly switch Decoders.decodeOptional(clazz: [Double].self, source: sourceDictionary["ArrayNumber"] as AnyObject?) { - case let .success(value): instance.arrayNumber = value + case let .success(value): result.arrayNumber = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "ArrayOfNumberOnly", actual: "\(source)")) } @@ -398,35 +393,33 @@ class Decoders { // Decoder for [ArrayTest] - Decoders.addDecoder(clazz: [ArrayTest].self) { (source: AnyObject) -> Decoded<[ArrayTest]> in - return Decoders.decode(clazz: [ArrayTest].self, source: source) + Decoders.addDecoder(clazz: [ArrayTest].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[ArrayTest]> in + return Decoders.decode(clazz: [ArrayTest].self, source: source, instance: instance) } // Decoder for ArrayTest - Decoders.addDecoder(clazz: ArrayTest.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: ArrayTest.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = ArrayTest() + let result = instance == nil ? ArrayTest() : instance as! ArrayTest switch Decoders.decodeOptional(clazz: [String].self, source: sourceDictionary["array_of_string"] as AnyObject?) { - case let .success(value): instance.arrayOfString = value + case let .success(value): result.arrayOfString = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: [[Int64]].self, source: sourceDictionary["array_array_of_integer"] as AnyObject?) { - case let .success(value): instance.arrayArrayOfInteger = value + case let .success(value): result.arrayArrayOfInteger = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: [[ReadOnlyFirst]].self, source: sourceDictionary["array_array_of_model"] as AnyObject?) { - case let .success(value): instance.arrayArrayOfModel = value + case let .success(value): result.arrayArrayOfModel = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "ArrayTest", actual: "\(source)")) } @@ -434,56 +427,51 @@ class Decoders { // Decoder for [Capitalization] - Decoders.addDecoder(clazz: [Capitalization].self) { (source: AnyObject) -> Decoded<[Capitalization]> in - return Decoders.decode(clazz: [Capitalization].self, source: source) + Decoders.addDecoder(clazz: [Capitalization].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Capitalization]> in + return Decoders.decode(clazz: [Capitalization].self, source: source, instance: instance) } // Decoder for Capitalization - Decoders.addDecoder(clazz: Capitalization.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Capitalization.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Capitalization() + let result = instance == nil ? Capitalization() : instance as! Capitalization switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["smallCamel"] as AnyObject?) { - case let .success(value): instance.smallCamel = value + case let .success(value): result.smallCamel = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["CapitalCamel"] as AnyObject?) { - case let .success(value): instance.capitalCamel = value + case let .success(value): result.capitalCamel = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["small_Snake"] as AnyObject?) { - case let .success(value): instance.smallSnake = value + case let .success(value): result.smallSnake = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["Capital_Snake"] as AnyObject?) { - case let .success(value): instance.capitalSnake = value + case let .success(value): result.capitalSnake = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["SCA_ETH_Flow_Points"] as AnyObject?) { - case let .success(value): instance.sCAETHFlowPoints = value + case let .success(value): result.sCAETHFlowPoints = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["ATT_NAME"] as AnyObject?) { - case let .success(value): instance.ATT_NAME = value + case let .success(value): result.ATT_NAME = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Capitalization", actual: "\(source)")) } @@ -491,35 +479,36 @@ class Decoders { // Decoder for [Cat] - Decoders.addDecoder(clazz: [Cat].self) { (source: AnyObject) -> Decoded<[Cat]> in - return Decoders.decode(clazz: [Cat].self, source: source) + Decoders.addDecoder(clazz: [Cat].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Cat]> in + return Decoders.decode(clazz: [Cat].self, source: source, instance: instance) } // Decoder for Cat - Decoders.addDecoder(clazz: Cat.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Cat.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Cat() + let result = instance == nil ? Cat() : instance as! Cat + if decoders["\(Animal.self)"] != nil { + _ = Decoders.decode(clazz: Animal.self, source: source, instance: result) + } switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["className"] as AnyObject?) { - case let .success(value): instance.className = value + case let .success(value): result.className = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["color"] as AnyObject?) { - case let .success(value): instance.color = value + case let .success(value): result.color = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Bool.self, source: sourceDictionary["declawed"] as AnyObject?) { - case let .success(value): instance.declawed = value + case let .success(value): result.declawed = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Cat", actual: "\(source)")) } @@ -527,28 +516,27 @@ class Decoders { // Decoder for [Category] - Decoders.addDecoder(clazz: [Category].self) { (source: AnyObject) -> Decoded<[Category]> in - return Decoders.decode(clazz: [Category].self, source: source) + Decoders.addDecoder(clazz: [Category].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Category]> in + return Decoders.decode(clazz: [Category].self, source: source, instance: instance) } // Decoder for Category - Decoders.addDecoder(clazz: Category.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Category.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Category() + let result = instance == nil ? Category() : instance as! Category switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["id"] as AnyObject?) { - case let .success(value): instance.id = value + case let .success(value): result.id = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["name"] as AnyObject?) { - case let .success(value): instance.name = value + case let .success(value): result.name = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Category", actual: "\(source)")) } @@ -556,21 +544,21 @@ class Decoders { // Decoder for [ClassModel] - Decoders.addDecoder(clazz: [ClassModel].self) { (source: AnyObject) -> Decoded<[ClassModel]> in - return Decoders.decode(clazz: [ClassModel].self, source: source) + Decoders.addDecoder(clazz: [ClassModel].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[ClassModel]> in + return Decoders.decode(clazz: [ClassModel].self, source: source, instance: instance) } // Decoder for ClassModel - Decoders.addDecoder(clazz: ClassModel.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: ClassModel.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = ClassModel() + let result = instance == nil ? ClassModel() : instance as! ClassModel switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["_class"] as AnyObject?) { - case let .success(value): instance._class = value + case let .success(value): result._class = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "ClassModel", actual: "\(source)")) } @@ -578,21 +566,21 @@ class Decoders { // Decoder for [Client] - Decoders.addDecoder(clazz: [Client].self) { (source: AnyObject) -> Decoded<[Client]> in - return Decoders.decode(clazz: [Client].self, source: source) + Decoders.addDecoder(clazz: [Client].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Client]> in + return Decoders.decode(clazz: [Client].self, source: source, instance: instance) } // Decoder for Client - Decoders.addDecoder(clazz: Client.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Client.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Client() + let result = instance == nil ? Client() : instance as! Client switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["client"] as AnyObject?) { - case let .success(value): instance.client = value + case let .success(value): result.client = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Client", actual: "\(source)")) } @@ -600,35 +588,36 @@ class Decoders { // Decoder for [Dog] - Decoders.addDecoder(clazz: [Dog].self) { (source: AnyObject) -> Decoded<[Dog]> in - return Decoders.decode(clazz: [Dog].self, source: source) + Decoders.addDecoder(clazz: [Dog].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Dog]> in + return Decoders.decode(clazz: [Dog].self, source: source, instance: instance) } // Decoder for Dog - Decoders.addDecoder(clazz: Dog.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Dog.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Dog() + let result = instance == nil ? Dog() : instance as! Dog + if decoders["\(Animal.self)"] != nil { + _ = Decoders.decode(clazz: Animal.self, source: source, instance: result) + } switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["className"] as AnyObject?) { - case let .success(value): instance.className = value + case let .success(value): result.className = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["color"] as AnyObject?) { - case let .success(value): instance.color = value + case let .success(value): result.color = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["breed"] as AnyObject?) { - case let .success(value): instance.breed = value + case let .success(value): result.breed = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Dog", actual: "\(source)")) } @@ -636,28 +625,27 @@ class Decoders { // Decoder for [EnumArrays] - Decoders.addDecoder(clazz: [EnumArrays].self) { (source: AnyObject) -> Decoded<[EnumArrays]> in - return Decoders.decode(clazz: [EnumArrays].self, source: source) + Decoders.addDecoder(clazz: [EnumArrays].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[EnumArrays]> in + return Decoders.decode(clazz: [EnumArrays].self, source: source, instance: instance) } // Decoder for EnumArrays - Decoders.addDecoder(clazz: EnumArrays.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: EnumArrays.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = EnumArrays() + let result = instance == nil ? EnumArrays() : instance as! EnumArrays switch Decoders.decodeOptional(clazz: EnumArrays.JustSymbol.self, source: sourceDictionary["just_symbol"] as AnyObject?) { - case let .success(value): instance.justSymbol = value + case let .success(value): result.justSymbol = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Array.self, source: sourceDictionary["array_enum"] as AnyObject?) { - case let .success(value): instance.arrayEnum = value + case let .success(value): result.arrayEnum = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "EnumArrays", actual: "\(source)")) } @@ -665,53 +653,50 @@ class Decoders { // Decoder for [EnumClass] - Decoders.addDecoder(clazz: [EnumClass].self) { (source: AnyObject) -> Decoded<[EnumClass]> in - return Decoders.decode(clazz: [EnumClass].self, source: source) + Decoders.addDecoder(clazz: [EnumClass].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[EnumClass]> in + return Decoders.decode(clazz: [EnumClass].self, source: source, instance: instance) } // Decoder for EnumClass - Decoders.addDecoder(clazz: EnumClass.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: EnumClass.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in //TODO: I don't think we need this anymore - return Decoders.decode(clazz: EnumClass.self, source: source) + return Decoders.decode(clazz: EnumClass.self, source: source, instance: instance) } // Decoder for [EnumTest] - Decoders.addDecoder(clazz: [EnumTest].self) { (source: AnyObject) -> Decoded<[EnumTest]> in - return Decoders.decode(clazz: [EnumTest].self, source: source) + Decoders.addDecoder(clazz: [EnumTest].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[EnumTest]> in + return Decoders.decode(clazz: [EnumTest].self, source: source, instance: instance) } // Decoder for EnumTest - Decoders.addDecoder(clazz: EnumTest.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: EnumTest.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = EnumTest() + let result = instance == nil ? EnumTest() : instance as! EnumTest switch Decoders.decodeOptional(clazz: EnumTest.EnumString.self, source: sourceDictionary["enum_string"] as AnyObject?) { - case let .success(value): instance.enumString = value + case let .success(value): result.enumString = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: EnumTest.EnumInteger.self, source: sourceDictionary["enum_integer"] as AnyObject?) { - case let .success(value): instance.enumInteger = value + case let .success(value): result.enumInteger = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: EnumTest.EnumNumber.self, source: sourceDictionary["enum_number"] as AnyObject?) { - case let .success(value): instance.enumNumber = value + case let .success(value): result.enumNumber = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: OuterEnum.self, source: sourceDictionary["outerEnum"] as AnyObject?) { - case let .success(value): instance.outerEnum = value + case let .success(value): result.outerEnum = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "EnumTest", actual: "\(source)")) } @@ -719,105 +704,93 @@ class Decoders { // Decoder for [FormatTest] - Decoders.addDecoder(clazz: [FormatTest].self) { (source: AnyObject) -> Decoded<[FormatTest]> in - return Decoders.decode(clazz: [FormatTest].self, source: source) + Decoders.addDecoder(clazz: [FormatTest].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[FormatTest]> in + return Decoders.decode(clazz: [FormatTest].self, source: source, instance: instance) } // Decoder for FormatTest - Decoders.addDecoder(clazz: FormatTest.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: FormatTest.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = FormatTest() + let result = instance == nil ? FormatTest() : instance as! FormatTest switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["integer"] as AnyObject?) { - case let .success(value): instance.integer = value + case let .success(value): result.integer = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["int32"] as AnyObject?) { - case let .success(value): instance.int32 = value + case let .success(value): result.int32 = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["int64"] as AnyObject?) { - case let .success(value): instance.int64 = value + case let .success(value): result.int64 = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Double.self, source: sourceDictionary["number"] as AnyObject?) { - case let .success(value): instance.number = value + case let .success(value): result.number = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Float.self, source: sourceDictionary["float"] as AnyObject?) { - case let .success(value): instance.float = value + case let .success(value): result.float = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Double.self, source: sourceDictionary["double"] as AnyObject?) { - case let .success(value): instance.double = value + case let .success(value): result.double = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["string"] as AnyObject?) { - case let .success(value): instance.string = value + case let .success(value): result.string = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Data.self, source: sourceDictionary["byte"] as AnyObject?) { - case let .success(value): instance.byte = value + case let .success(value): result.byte = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Data.self, source: sourceDictionary["binary"] as AnyObject?) { - case let .success(value): instance.binary = value + case let .success(value): result.binary = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: ISOFullDate.self, source: sourceDictionary["date"] as AnyObject?) { - case let .success(value): instance.date = value + case let .success(value): result.date = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Date.self, source: sourceDictionary["dateTime"] as AnyObject?) { - case let .success(value): instance.dateTime = value + case let .success(value): result.dateTime = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: UUID.self, source: sourceDictionary["uuid"] as AnyObject?) { - case let .success(value): instance.uuid = value + case let .success(value): result.uuid = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["password"] as AnyObject?) { - case let .success(value): instance.password = value + case let .success(value): result.password = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "FormatTest", actual: "\(source)")) } @@ -825,28 +798,27 @@ class Decoders { // Decoder for [HasOnlyReadOnly] - Decoders.addDecoder(clazz: [HasOnlyReadOnly].self) { (source: AnyObject) -> Decoded<[HasOnlyReadOnly]> in - return Decoders.decode(clazz: [HasOnlyReadOnly].self, source: source) + Decoders.addDecoder(clazz: [HasOnlyReadOnly].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[HasOnlyReadOnly]> in + return Decoders.decode(clazz: [HasOnlyReadOnly].self, source: source, instance: instance) } // Decoder for HasOnlyReadOnly - Decoders.addDecoder(clazz: HasOnlyReadOnly.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: HasOnlyReadOnly.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = HasOnlyReadOnly() + let result = instance == nil ? HasOnlyReadOnly() : instance as! HasOnlyReadOnly switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["bar"] as AnyObject?) { - case let .success(value): instance.bar = value + case let .success(value): result.bar = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["foo"] as AnyObject?) { - case let .success(value): instance.foo = value + case let .success(value): result.foo = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "HasOnlyReadOnly", actual: "\(source)")) } @@ -854,21 +826,21 @@ class Decoders { // Decoder for [List] - Decoders.addDecoder(clazz: [List].self) { (source: AnyObject) -> Decoded<[List]> in - return Decoders.decode(clazz: [List].self, source: source) + Decoders.addDecoder(clazz: [List].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[List]> in + return Decoders.decode(clazz: [List].self, source: source, instance: instance) } // Decoder for List - Decoders.addDecoder(clazz: List.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: List.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = List() + let result = instance == nil ? List() : instance as! List switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["123-list"] as AnyObject?) { - case let .success(value): instance._123List = value + case let .success(value): result._123List = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "List", actual: "\(source)")) } @@ -876,28 +848,27 @@ class Decoders { // Decoder for [MapTest] - Decoders.addDecoder(clazz: [MapTest].self) { (source: AnyObject) -> Decoded<[MapTest]> in - return Decoders.decode(clazz: [MapTest].self, source: source) + Decoders.addDecoder(clazz: [MapTest].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[MapTest]> in + return Decoders.decode(clazz: [MapTest].self, source: source, instance: instance) } // Decoder for MapTest - Decoders.addDecoder(clazz: MapTest.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: MapTest.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = MapTest() + let result = instance == nil ? MapTest() : instance as! MapTest switch Decoders.decodeOptional(clazz: [String:[String:String]].self, source: sourceDictionary["map_map_of_string"] as AnyObject?) { - case let .success(value): instance.mapMapOfString = value + case let .success(value): result.mapMapOfString = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: MapTest.MapOfEnumString.self, source: sourceDictionary["map_of_enum_string"] as AnyObject?) { /* - case let .success(value): instance.mapOfEnumString = value + case let .success(value): result.mapOfEnumString = value case let .failure(error): return .failure(error) */ default: break //TODO: handle enum map scenario } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "MapTest", actual: "\(source)")) } @@ -905,35 +876,33 @@ class Decoders { // Decoder for [MixedPropertiesAndAdditionalPropertiesClass] - Decoders.addDecoder(clazz: [MixedPropertiesAndAdditionalPropertiesClass].self) { (source: AnyObject) -> Decoded<[MixedPropertiesAndAdditionalPropertiesClass]> in - return Decoders.decode(clazz: [MixedPropertiesAndAdditionalPropertiesClass].self, source: source) + Decoders.addDecoder(clazz: [MixedPropertiesAndAdditionalPropertiesClass].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[MixedPropertiesAndAdditionalPropertiesClass]> in + return Decoders.decode(clazz: [MixedPropertiesAndAdditionalPropertiesClass].self, source: source, instance: instance) } // Decoder for MixedPropertiesAndAdditionalPropertiesClass - Decoders.addDecoder(clazz: MixedPropertiesAndAdditionalPropertiesClass.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: MixedPropertiesAndAdditionalPropertiesClass.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = MixedPropertiesAndAdditionalPropertiesClass() + let result = instance == nil ? MixedPropertiesAndAdditionalPropertiesClass() : instance as! MixedPropertiesAndAdditionalPropertiesClass switch Decoders.decodeOptional(clazz: UUID.self, source: sourceDictionary["uuid"] as AnyObject?) { - case let .success(value): instance.uuid = value + case let .success(value): result.uuid = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Date.self, source: sourceDictionary["dateTime"] as AnyObject?) { - case let .success(value): instance.dateTime = value + case let .success(value): result.dateTime = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: [String:Animal].self, source: sourceDictionary["map"] as AnyObject?) { - case let .success(value): instance.map = value + case let .success(value): result.map = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "MixedPropertiesAndAdditionalPropertiesClass", actual: "\(source)")) } @@ -941,28 +910,27 @@ class Decoders { // Decoder for [Model200Response] - Decoders.addDecoder(clazz: [Model200Response].self) { (source: AnyObject) -> Decoded<[Model200Response]> in - return Decoders.decode(clazz: [Model200Response].self, source: source) + Decoders.addDecoder(clazz: [Model200Response].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Model200Response]> in + return Decoders.decode(clazz: [Model200Response].self, source: source, instance: instance) } // Decoder for Model200Response - Decoders.addDecoder(clazz: Model200Response.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Model200Response.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Model200Response() + let result = instance == nil ? Model200Response() : instance as! Model200Response switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["name"] as AnyObject?) { - case let .success(value): instance.name = value + case let .success(value): result.name = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["class"] as AnyObject?) { - case let .success(value): instance._class = value + case let .success(value): result._class = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Model200Response", actual: "\(source)")) } @@ -970,42 +938,39 @@ class Decoders { // Decoder for [Name] - Decoders.addDecoder(clazz: [Name].self) { (source: AnyObject) -> Decoded<[Name]> in - return Decoders.decode(clazz: [Name].self, source: source) + Decoders.addDecoder(clazz: [Name].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Name]> in + return Decoders.decode(clazz: [Name].self, source: source, instance: instance) } // Decoder for Name - Decoders.addDecoder(clazz: Name.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Name.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Name() + let result = instance == nil ? Name() : instance as! Name switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["name"] as AnyObject?) { - case let .success(value): instance.name = value + case let .success(value): result.name = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["snake_case"] as AnyObject?) { - case let .success(value): instance.snakeCase = value + case let .success(value): result.snakeCase = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["property"] as AnyObject?) { - case let .success(value): instance.property = value + case let .success(value): result.property = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["123Number"] as AnyObject?) { - case let .success(value): instance._123Number = value + case let .success(value): result._123Number = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Name", actual: "\(source)")) } @@ -1013,21 +978,21 @@ class Decoders { // Decoder for [NumberOnly] - Decoders.addDecoder(clazz: [NumberOnly].self) { (source: AnyObject) -> Decoded<[NumberOnly]> in - return Decoders.decode(clazz: [NumberOnly].self, source: source) + Decoders.addDecoder(clazz: [NumberOnly].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[NumberOnly]> in + return Decoders.decode(clazz: [NumberOnly].self, source: source, instance: instance) } // Decoder for NumberOnly - Decoders.addDecoder(clazz: NumberOnly.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: NumberOnly.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = NumberOnly() + let result = instance == nil ? NumberOnly() : instance as! NumberOnly switch Decoders.decodeOptional(clazz: Double.self, source: sourceDictionary["JustNumber"] as AnyObject?) { - case let .success(value): instance.justNumber = value + case let .success(value): result.justNumber = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "NumberOnly", actual: "\(source)")) } @@ -1035,56 +1000,51 @@ class Decoders { // Decoder for [Order] - Decoders.addDecoder(clazz: [Order].self) { (source: AnyObject) -> Decoded<[Order]> in - return Decoders.decode(clazz: [Order].self, source: source) + Decoders.addDecoder(clazz: [Order].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Order]> in + return Decoders.decode(clazz: [Order].self, source: source, instance: instance) } // Decoder for Order - Decoders.addDecoder(clazz: Order.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Order.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Order() + let result = instance == nil ? Order() : instance as! Order switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["id"] as AnyObject?) { - case let .success(value): instance.id = value + case let .success(value): result.id = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["petId"] as AnyObject?) { - case let .success(value): instance.petId = value + case let .success(value): result.petId = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["quantity"] as AnyObject?) { - case let .success(value): instance.quantity = value + case let .success(value): result.quantity = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Date.self, source: sourceDictionary["shipDate"] as AnyObject?) { - case let .success(value): instance.shipDate = value + case let .success(value): result.shipDate = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Order.Status.self, source: sourceDictionary["status"] as AnyObject?) { - case let .success(value): instance.status = value + case let .success(value): result.status = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Bool.self, source: sourceDictionary["complete"] as AnyObject?) { - case let .success(value): instance.complete = value + case let .success(value): result.complete = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Order", actual: "\(source)")) } @@ -1092,67 +1052,62 @@ class Decoders { // Decoder for [OuterEnum] - Decoders.addDecoder(clazz: [OuterEnum].self) { (source: AnyObject) -> Decoded<[OuterEnum]> in - return Decoders.decode(clazz: [OuterEnum].self, source: source) + Decoders.addDecoder(clazz: [OuterEnum].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[OuterEnum]> in + return Decoders.decode(clazz: [OuterEnum].self, source: source, instance: instance) } // Decoder for OuterEnum - Decoders.addDecoder(clazz: OuterEnum.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: OuterEnum.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in //TODO: I don't think we need this anymore - return Decoders.decode(clazz: OuterEnum.self, source: source) + return Decoders.decode(clazz: OuterEnum.self, source: source, instance: instance) } // Decoder for [Pet] - Decoders.addDecoder(clazz: [Pet].self) { (source: AnyObject) -> Decoded<[Pet]> in - return Decoders.decode(clazz: [Pet].self, source: source) + Decoders.addDecoder(clazz: [Pet].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Pet]> in + return Decoders.decode(clazz: [Pet].self, source: source, instance: instance) } // Decoder for Pet - Decoders.addDecoder(clazz: Pet.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Pet.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Pet() + let result = instance == nil ? Pet() : instance as! Pet switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["id"] as AnyObject?) { - case let .success(value): instance.id = value + case let .success(value): result.id = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Category.self, source: sourceDictionary["category"] as AnyObject?) { - case let .success(value): instance.category = value + case let .success(value): result.category = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["name"] as AnyObject?) { - case let .success(value): instance.name = value + case let .success(value): result.name = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: [String].self, source: sourceDictionary["photoUrls"] as AnyObject?) { - case let .success(value): instance.photoUrls = value + case let .success(value): result.photoUrls = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: [Tag].self, source: sourceDictionary["tags"] as AnyObject?) { - case let .success(value): instance.tags = value + case let .success(value): result.tags = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Pet.Status.self, source: sourceDictionary["status"] as AnyObject?) { - case let .success(value): instance.status = value + case let .success(value): result.status = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Pet", actual: "\(source)")) } @@ -1160,28 +1115,27 @@ class Decoders { // Decoder for [ReadOnlyFirst] - Decoders.addDecoder(clazz: [ReadOnlyFirst].self) { (source: AnyObject) -> Decoded<[ReadOnlyFirst]> in - return Decoders.decode(clazz: [ReadOnlyFirst].self, source: source) + Decoders.addDecoder(clazz: [ReadOnlyFirst].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[ReadOnlyFirst]> in + return Decoders.decode(clazz: [ReadOnlyFirst].self, source: source, instance: instance) } // Decoder for ReadOnlyFirst - Decoders.addDecoder(clazz: ReadOnlyFirst.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: ReadOnlyFirst.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = ReadOnlyFirst() + let result = instance == nil ? ReadOnlyFirst() : instance as! ReadOnlyFirst switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["bar"] as AnyObject?) { - case let .success(value): instance.bar = value + case let .success(value): result.bar = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["baz"] as AnyObject?) { - case let .success(value): instance.baz = value + case let .success(value): result.baz = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "ReadOnlyFirst", actual: "\(source)")) } @@ -1189,21 +1143,21 @@ class Decoders { // Decoder for [Return] - Decoders.addDecoder(clazz: [Return].self) { (source: AnyObject) -> Decoded<[Return]> in - return Decoders.decode(clazz: [Return].self, source: source) + Decoders.addDecoder(clazz: [Return].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Return]> in + return Decoders.decode(clazz: [Return].self, source: source, instance: instance) } // Decoder for Return - Decoders.addDecoder(clazz: Return.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Return.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Return() + let result = instance == nil ? Return() : instance as! Return switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["return"] as AnyObject?) { - case let .success(value): instance._return = value + case let .success(value): result._return = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Return", actual: "\(source)")) } @@ -1211,21 +1165,21 @@ class Decoders { // Decoder for [SpecialModelName] - Decoders.addDecoder(clazz: [SpecialModelName].self) { (source: AnyObject) -> Decoded<[SpecialModelName]> in - return Decoders.decode(clazz: [SpecialModelName].self, source: source) + Decoders.addDecoder(clazz: [SpecialModelName].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[SpecialModelName]> in + return Decoders.decode(clazz: [SpecialModelName].self, source: source, instance: instance) } // Decoder for SpecialModelName - Decoders.addDecoder(clazz: SpecialModelName.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: SpecialModelName.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = SpecialModelName() + let result = instance == nil ? SpecialModelName() : instance as! SpecialModelName switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["$special[property.name]"] as AnyObject?) { - case let .success(value): instance.specialPropertyName = value + case let .success(value): result.specialPropertyName = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "SpecialModelName", actual: "\(source)")) } @@ -1233,28 +1187,27 @@ class Decoders { // Decoder for [Tag] - Decoders.addDecoder(clazz: [Tag].self) { (source: AnyObject) -> Decoded<[Tag]> in - return Decoders.decode(clazz: [Tag].self, source: source) + Decoders.addDecoder(clazz: [Tag].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[Tag]> in + return Decoders.decode(clazz: [Tag].self, source: source, instance: instance) } // Decoder for Tag - Decoders.addDecoder(clazz: Tag.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: Tag.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = Tag() + let result = instance == nil ? Tag() : instance as! Tag switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["id"] as AnyObject?) { - case let .success(value): instance.id = value + case let .success(value): result.id = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["name"] as AnyObject?) { - case let .success(value): instance.name = value + case let .success(value): result.name = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "Tag", actual: "\(source)")) } @@ -1262,70 +1215,63 @@ class Decoders { // Decoder for [User] - Decoders.addDecoder(clazz: [User].self) { (source: AnyObject) -> Decoded<[User]> in - return Decoders.decode(clazz: [User].self, source: source) + Decoders.addDecoder(clazz: [User].self) { (source: AnyObject, instance: AnyObject?) -> Decoded<[User]> in + return Decoders.decode(clazz: [User].self, source: source, instance: instance) } // Decoder for User - Decoders.addDecoder(clazz: User.self) { (source: AnyObject) -> Decoded in + Decoders.addDecoder(clazz: User.self) { (source: AnyObject, instance: AnyObject?) -> Decoded in if let sourceDictionary = source as? [AnyHashable: Any] { - let instance = User() + let result = instance == nil ? User() : instance as! User switch Decoders.decodeOptional(clazz: Int64.self, source: sourceDictionary["id"] as AnyObject?) { - case let .success(value): instance.id = value + case let .success(value): result.id = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["username"] as AnyObject?) { - case let .success(value): instance.username = value + case let .success(value): result.username = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["firstName"] as AnyObject?) { - case let .success(value): instance.firstName = value + case let .success(value): result.firstName = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["lastName"] as AnyObject?) { - case let .success(value): instance.lastName = value + case let .success(value): result.lastName = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["email"] as AnyObject?) { - case let .success(value): instance.email = value + case let .success(value): result.email = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["password"] as AnyObject?) { - case let .success(value): instance.password = value + case let .success(value): result.password = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: String.self, source: sourceDictionary["phone"] as AnyObject?) { - case let .success(value): instance.phone = value + case let .success(value): result.phone = value case let .failure(error): return .failure(error) } - switch Decoders.decodeOptional(clazz: Int32.self, source: sourceDictionary["userStatus"] as AnyObject?) { - case let .success(value): instance.userStatus = value + case let .success(value): result.userStatus = value case let .failure(error): return .failure(error) } - return .success(instance) + return .success(result) } else { return .failure(.typeMismatch(expected: "User", actual: "\(source)")) }