in Sources/MockoloFramework/Templates/ClosureTemplate.swift [20:64]
func applyClosureTemplate(name: String,
type: Type,
genericTypeNames: [String],
paramVals: [String]?,
paramTypes: [Type]?,
suffix: String,
returnDefaultType: Type) -> String {
var handlerParamValsStr = ""
if let paramVals = paramVals, let paramTypes = paramTypes {
let zipped = zip(paramVals, paramTypes).map { (arg) -> String in
let (argName, argType) = arg
if argType.isAutoclosure {
return argName.safeName + "()"
}
if argType.isInOut {
return "&" + argName.safeName
}
if argType.hasClosure && argType.isOptional,
let renderedClosure = renderOptionalGenericClosure(argType: argType, argName: argName) {
return renderedClosure
}
return argName.safeName
}
handlerParamValsStr = zipped.joined(separator: ", ")
}
let handlerReturnDefault = renderReturnDefaultStatement(name: name, type: returnDefaultType)
let prefix = [
suffix.hasThrowsOrRethrows ? String.try + " " : nil,
suffix.hasAsync ? String.await + " " : nil,
].compactMap { $0 }.joined()
let returnStr = returnDefaultType.typeName.isEmpty ? "" : "return "
let callExpr = "\(returnStr)\(prefix)\(name)(\(handlerParamValsStr))\(type.cast ?? "")"
let template = """
\(2.tab)if let \(name) = \(name) {
\(3.tab)\(callExpr)
\(2.tab)}
\(2.tab)\(handlerReturnDefault)
"""
return template
}