Skip to content

Commit e8300fc

Browse files
committed
member wiseInit upgrade
1 parent eb90d37 commit e8300fc

File tree

2 files changed

+32
-6
lines changed

2 files changed

+32
-6
lines changed

Sources/CodableWrapperMacros/Codable.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public struct Codable: ExtensionMacro, MemberMacro {
4545
return [decoder, encoder]
4646
} else {
4747
let memberwiseInit = try propertyContainer.genMemberwiseInit(config: .init(isOverride: false))
48-
return [decoder, encoder, memberwiseInit]
48+
return [decoder, encoder] + memberwiseInit
4949
}
5050
}
5151
}

Sources/CodableWrapperMacros/ModelMemberPropertyContainer.swift

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -148,26 +148,52 @@ struct ModelMemberPropertyContainer {
148148
return encoder
149149
}
150150

151-
func genMemberwiseInit(config: GenConfig) throws -> DeclSyntax {
151+
func genMemberwiseInit(config: GenConfig) throws -> [DeclSyntax] {
152+
var allHasInitializerExpr = true
152153
let parameters = memberProperties.map { property in
153154
var text = property.name
154155
text += ": " + property.type
155156
if let initializerExpr = property.initializerExpr {
156157
text += "= \(initializerExpr)"
157158
} else if property.isOptional {
158159
text += "= nil"
160+
} else {
161+
allHasInitializerExpr = false
159162
}
160163
return text
161164
}
162165

163166
let overrideInit = config.isOverride ? "super.init()\n" : ""
164167

165-
return
166-
"""
167-
\(raw: attributesPrefix(option: [.public]))init(\(raw: parameters.joined(separator: ", "))) {
168-
\(raw: overrideInit)\(raw: memberProperties.map { "self.\($0.name) = \($0.name)" }.joined(separator: "\n"))
168+
var inits: [DeclSyntax] = []
169+
170+
let initArgs = """
171+
\(raw: attributesPrefix(option: [.public]))init(\n\(raw: parameters.joined(separator: ", \n"))\n) {
172+
\(raw: overrideInit)\(raw: memberProperties.map { "self.\($0.name) = \($0.name)" }.joined(separator: "\n"))
173+
}
174+
""" as DeclSyntax
175+
inits.append(initArgs)
176+
177+
if allHasInitializerExpr {
178+
let argsInit = memberProperties.map { property in
179+
var text = "self.\(property.name)"
180+
if let initializerExpr = property.initializerExpr {
181+
text += " = \(initializerExpr)"
182+
} else if property.isOptional {
183+
text += " = nil"
184+
}
185+
return text
186+
}
187+
188+
let initDecl = """
189+
\(raw: attributesPrefix(option: [.public]))init() {
190+
\(raw: overrideInit)\(raw: argsInit.joined(separator: "\n"))
169191
}
170192
""" as DeclSyntax
193+
inits.append(initDecl)
194+
}
195+
196+
return inits
171197
}
172198
}
173199

0 commit comments

Comments
 (0)