diff --git a/modules/swagger-codegen/src/main/resources/swift4/model.mustache b/modules/swagger-codegen/src/main/resources/swift4/model.mustache index eb51bc23d09..189acedc53d 100644 --- a/modules/swagger-codegen/src/main/resources/swift4/model.mustache +++ b/modules/swagger-codegen/src/main/resources/swift4/model.mustache @@ -11,102 +11,14 @@ import Foundation /** {{description}} */{{/description}} {{#isArrayModel}} -public typealias {{classname}} = {{parent}} +{{> modelArray}} {{/isArrayModel}} {{^isArrayModel}} {{#isEnum}} -public enum {{classname}}: {{dataType}}, Codable { -{{#allowableValues}}{{#enumVars}} case {{name}} = "{{{value}}}" -{{/enumVars}}{{/allowableValues}} -} +{{> modelEnum}} {{/isEnum}} {{^isEnum}} - -open class {{classname}}: {{#parent}}{{{parent}}}{{/parent}}{{^parent}}Codable{{/parent}} { - -{{#vars}} -{{#isEnum}} - public enum {{enumName}}: {{^isContainer}}{{datatype}}{{/isContainer}}{{#isContainer}}String{{/isContainer}}, Codable { {{#allowableValues}}{{#enumVars}} - case {{name}} = {{#isContainer}}"{{/isContainer}}{{#isString}}"{{/isString}}{{{value}}}{{#isString}}"{{/isString}}{{#isContainer}}"{{/isContainer}}{{/enumVars}}{{/allowableValues}} - } -{{/isEnum}} -{{/vars}} -{{#vars}} -{{#isEnum}} - {{#description}}/** {{description}} */ - {{/description}}public var {{name}}: {{{datatypeWithEnum}}}{{^required}}?{{/required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}} -{{/isEnum}} -{{^isEnum}} - {{#description}}/** {{description}} */ - {{/description}}public var {{name}}: {{{datatype}}}{{^required}}?{{/required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{#objcCompatible}}{{#vendorExtensions.x-swift-optional-scalar}} - public var {{name}}Num: NSNumber? { - get { - return {{name}}.map({ return NSNumber(value: $0) }) - } - }{{/vendorExtensions.x-swift-optional-scalar}}{{/objcCompatible}} -{{/isEnum}} -{{/vars}} - -{{#additionalPropertiesType}} - public var additionalProperties: [String:{{{additionalPropertiesType}}}] = [:] - - public subscript(key: String) -> {{{additionalPropertiesType}}}? { - get { - if let value = additionalProperties[key] { - return value - } - return nil - } - - set { - additionalProperties[key] = newValue - } - } -{{/additionalPropertiesType}} - - {{^parent}}{{#hasVars}} - public init({{#vars}}{{name}}: {{{datatypeWithEnum}}}{{^required}}?{{/required}}{{#hasMore}}, {{/hasMore}}{{/vars}}) { - {{#vars}} - self.{{name}} = {{name}} - {{/vars}} - } - {{/hasVars}}{{/parent}} - - // Encodable protocol methods - - public {{#parent}}override {{/parent}}func encode(to encoder: Encoder) throws { - - var container = encoder.container(keyedBy: String.self) - - {{#vars}} - try container.encode{{^required}}IfPresent{{/required}}({{{name}}}, forKey: "{{{baseName}}}") - {{/vars}} - {{#additionalPropertiesType}} - try container.encodeMap(additionalProperties) - {{/additionalPropertiesType}} - } - - // Decodable protocol methods - - public required init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: String.self) - - {{#vars}} - {{name}} = try container.decode{{^required}}IfPresent{{/required}}({{{datatypeWithEnum}}}.self, forKey: "{{{baseName}}}") - {{/vars}} - {{#additionalPropertiesType}} - var nonAdditionalPropertyKeys = Set() - {{#vars}} - nonAdditionalPropertyKeys.insert("{{{baseName}}}") - {{/vars}} - additionalProperties = try container.decodeMap({{{additionalPropertiesType}}}.self, excludedKeys: nonAdditionalPropertyKeys) - {{/additionalPropertiesType}} - {{#parent}} - try super.init(from: decoder) - {{/parent}} - } -} - +{{> modelObject}} {{/isEnum}} {{/isArrayModel}} {{/model}} diff --git a/modules/swagger-codegen/src/main/resources/swift4/modelArray.mustache b/modules/swagger-codegen/src/main/resources/swift4/modelArray.mustache new file mode 100644 index 00000000000..843626158cd --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/swift4/modelArray.mustache @@ -0,0 +1 @@ +public typealias {{classname}} = {{parent}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/swift4/modelEnum.mustache b/modules/swagger-codegen/src/main/resources/swift4/modelEnum.mustache new file mode 100644 index 00000000000..0b5bebe0ebd --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/swift4/modelEnum.mustache @@ -0,0 +1,4 @@ +public enum {{classname}}: {{dataType}}, Codable { +{{#allowableValues}}{{#enumVars}} case {{name}} = "{{{value}}}" +{{/enumVars}}{{/allowableValues}} +} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/swift4/modelInlineEnumDeclaration.mustache b/modules/swagger-codegen/src/main/resources/swift4/modelInlineEnumDeclaration.mustache new file mode 100644 index 00000000000..c713edb31e2 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/swift4/modelInlineEnumDeclaration.mustache @@ -0,0 +1,3 @@ + public enum {{enumName}}: {{^isContainer}}{{datatype}}{{/isContainer}}{{#isContainer}}String{{/isContainer}}, Codable { {{#allowableValues}}{{#enumVars}} + case {{name}} = {{#isContainer}}"{{/isContainer}}{{#isString}}"{{/isString}}{{{value}}}{{#isString}}"{{/isString}}{{#isContainer}}"{{/isContainer}}{{/enumVars}}{{/allowableValues}} + } \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/swift4/modelObject.mustache b/modules/swagger-codegen/src/main/resources/swift4/modelObject.mustache new file mode 100644 index 00000000000..b0c33368164 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/swift4/modelObject.mustache @@ -0,0 +1,83 @@ + +open class {{classname}}: {{#parent}}{{{parent}}}{{/parent}}{{^parent}}Codable{{/parent}} { + +{{#vars}} +{{#isEnum}} +{{> modelInlineEnumDeclaration}} +{{/isEnum}} +{{/vars}} +{{#vars}} +{{#isEnum}} + {{#description}}/** {{description}} */ + {{/description}}public var {{name}}: {{{datatypeWithEnum}}}{{^required}}?{{/required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}} +{{/isEnum}} +{{^isEnum}} + {{#description}}/** {{description}} */ + {{/description}}public var {{name}}: {{{datatype}}}{{^required}}?{{/required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{#objcCompatible}}{{#vendorExtensions.x-swift-optional-scalar}} + public var {{name}}Num: NSNumber? { + get { + return {{name}}.map({ return NSNumber(value: $0) }) + } + }{{/vendorExtensions.x-swift-optional-scalar}}{{/objcCompatible}} +{{/isEnum}} +{{/vars}} + +{{#additionalPropertiesType}} + public var additionalProperties: [String:{{{additionalPropertiesType}}}] = [:] + + public subscript(key: String) -> {{{additionalPropertiesType}}}? { + get { + if let value = additionalProperties[key] { + return value + } + return nil + } + + set { + additionalProperties[key] = newValue + } + } +{{/additionalPropertiesType}} + + {{^parent}}{{#hasVars}} + public init({{#vars}}{{name}}: {{{datatypeWithEnum}}}{{^required}}?{{/required}}{{#hasMore}}, {{/hasMore}}{{/vars}}) { + {{#vars}} + self.{{name}} = {{name}} + {{/vars}} + } + {{/hasVars}}{{/parent}} + + // Encodable protocol methods + + public {{#parent}}override {{/parent}}func encode(to encoder: Encoder) throws { + + var container = encoder.container(keyedBy: String.self) + + {{#vars}} + try container.encode{{^required}}IfPresent{{/required}}({{{name}}}, forKey: "{{{baseName}}}") + {{/vars}} + {{#additionalPropertiesType}} + try container.encodeMap(additionalProperties) + {{/additionalPropertiesType}} + } + + // Decodable protocol methods + + public required init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: String.self) + + {{#vars}} + {{name}} = try container.decode{{^required}}IfPresent{{/required}}({{{datatypeWithEnum}}}.self, forKey: "{{{baseName}}}") + {{/vars}} + {{#additionalPropertiesType}} + var nonAdditionalPropertyKeys = Set() + {{#vars}} + nonAdditionalPropertyKeys.insert("{{{baseName}}}") + {{/vars}} + additionalProperties = try container.decodeMap({{{additionalPropertiesType}}}.self, excludedKeys: nonAdditionalPropertyKeys) + {{/additionalPropertiesType}} + {{#parent}} + try super.init(from: decoder) + {{/parent}} + } +}