diff --git a/Sources/_OpenAPIGeneratorCore/Translator/CommonTranslations/translateCodable.swift b/Sources/_OpenAPIGeneratorCore/Translator/CommonTranslations/translateCodable.swift index b1283566..884b7aa7 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/CommonTranslations/translateCodable.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/CommonTranslations/translateCodable.swift @@ -118,7 +118,7 @@ extension FileTranslator { let assignExprs: [Expression] = properties.map { property in let typeUsage = property.typeUsage return .assignment( - left: .identifierPattern(property.swiftSafeName), + left: .identifierPattern("self").dot(property.swiftSafeName), right: .try( .identifierPattern("container").dot("decode\(typeUsage.isOptional ? "IfPresent" : "")") .call([ diff --git a/Tests/OpenAPIGeneratorReferenceTests/Resources/ReferenceSources/Petstore/Types.swift b/Tests/OpenAPIGeneratorReferenceTests/Resources/ReferenceSources/Petstore/Types.swift index 47b0390d..71de33ec 100644 --- a/Tests/OpenAPIGeneratorReferenceTests/Resources/ReferenceSources/Petstore/Types.swift +++ b/Tests/OpenAPIGeneratorReferenceTests/Resources/ReferenceSources/Petstore/Types.swift @@ -594,7 +594,7 @@ public enum Components { } public init(from decoder: any Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) - foo = try container.decodeIfPresent( + self.foo = try container.decodeIfPresent( Swift.String.self, forKey: .foo ) @@ -626,7 +626,7 @@ public enum Components { } public init(from decoder: any Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) - foo = try container.decodeIfPresent( + self.foo = try container.decodeIfPresent( Swift.String.self, forKey: .foo ) @@ -666,7 +666,7 @@ public enum Components { } public init(from decoder: any Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) - foo = try container.decodeIfPresent( + self.foo = try container.decodeIfPresent( Swift.String.self, forKey: .foo ) diff --git a/Tests/OpenAPIGeneratorReferenceTests/SnippetBasedReferenceTests.swift b/Tests/OpenAPIGeneratorReferenceTests/SnippetBasedReferenceTests.swift index c46bbc43..a00b3cbc 100644 --- a/Tests/OpenAPIGeneratorReferenceTests/SnippetBasedReferenceTests.swift +++ b/Tests/OpenAPIGeneratorReferenceTests/SnippetBasedReferenceTests.swift @@ -510,15 +510,30 @@ final class SnippetBasedReferenceTests: XCTestCase { schemas: MyObject: type: object - properties: {} + properties: + id: + type: string additionalProperties: false """, """ public enum Schemas { public struct MyObject: Codable, Hashable, Sendable { - public init() {} + public var id: Swift.String? + public init(id: Swift.String? = nil) { + self.id = id + } + public enum CodingKeys: String, CodingKey { + case id + } public init(from decoder: any Decoder) throws { - try decoder.ensureNoAdditionalProperties(knownKeys: []) + let container = try decoder.container(keyedBy: CodingKeys.self) + self.id = try container.decodeIfPresent( + Swift.String.self, + forKey: .id + ) + try decoder.ensureNoAdditionalProperties(knownKeys: [ + "id" + ]) } } }