Migration Alamofire 4 to 5 build issue

245 Views Asked by At

I am doing migration after 2 years a lots things have been changed, now flagging a lots of error while building. Most are related to Alamofire 5. Now there are many error keeps coming fixing one by one.

Error: // ERROR: Cannot specialize non-generic type

 public static func ObjMappingSerializer<T: Mappable>(_ keyPath: String?) -> DataResponseSerializer<T> { 'DataResponseSerializer'
        return DataResponseSerializer { request, response, data, error in
            //LogResponse(response, data: data, error: error)
            Logger._reqresLogger.logResponse(response, data: data, error: error)
            guard error == nil else {
                return .failure(parseErrorResponse(data: data, response: response, errorType: error!))
            }
            
            guard let _ = data else {
                return .failure(errorForNilData())
            }
            
            let JSONToMap = deserializeJSON(request: request, response: response, data: data, error: error, keyPath: keyPath)
            if let json = JSONToMap as? [String:Any], let parsedObject = Mapper<T>().map(JSON:json) {
                return .success(parsedObject)
            }
            
            let errorCode = response?.statusCode ?? NSURLErrorCannotParseResponse
            return .failure(APIError(code: errorCode, errorUserInfo: nil))
        }
    }

Fixed by autosuggestion however next error comes

Error: Trailing closure passed to parameter of type 'DataPreprocessor' that does not accept a closure

public static func ObjMappingSerializer(_ keyPath: String?) -> DataResponseSerializer {
            return DataResponseSerializer { request, response, data, error in
                //LogResponse(response, data: data, error: error)
                Logger._reqresLogger.logResponse(response, data: data, error: error)
                guard error == nil else {
                    return .failure(parseErrorResponse(data: data, response: response, errorType: error!))
                }
                
                guard let _ = data else {
                    return .failure(errorForNilData())
                }
                
                let JSONToMap = deserializeJSON(request: request, response: response, data: data, error: error, keyPath: keyPath)
                if let json = JSONToMap as? [String:Any], let parsedObject = Mapper<T>().map(JSON:json) {
                    return .success(parsedObject)
                }
                
                let errorCode = response?.statusCode ?? NSURLErrorCannotParseResponse
                return .failure(APIError(code: errorCode, errorUserInfo: nil))
            }
        }

Now in Alamofire many methods have been removed in Alamofire 5. How can I fix these errors?

1

There are 1 best solutions below

0
Jon Shier On

You can no longer initialize a DataResponseSerializer with a closure. I suggest you reevaluate your parsing needs and rebuild around responseDecodable. If you need, you can create your own serializer by adopting ResponseSerializer. Your logic would be the same, just copied into the parse method.