func applyClosureTemplate()

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
    }