// // DataRequestExtension.swift // GMERemittance // // Created by gme_2 on 22/08/2018. // Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. // import Foundation import Alamofire import ObjectMapper import SwiftyJSON enum GMEResponseErrorCode: Int { case timeOut = 0 case failure case unknown case deleted } enum GmeResponseOperationStatusCode: String { case successfull = "Operation Successfull" } extension DataRequest { func handle( success: @escaping (T) -> Void, failure: @escaping (Error) -> Void ) { self.validate().responseJSON { (response) -> Void in switch response.result { case .success(let value): let json = JSON(value) if let model: T = json.map() { success(model) } else if (response.response?.statusCode ?? -1) == 204 { let error = self.makeError( message: "Response could not be mapped", code: GMEResponseErrorCode.unknown.rawValue ) failure(error) } else { let error = self.makeError( message: GmeResponseOperationStatusCode.successfull.rawValue, code: GMEResponseErrorCode.deleted.rawValue ) failure(error) } case .failure(let error): debugPrint("DataRequest Error: \(error.localizedDescription)") if (response.response?.statusCode ?? -1) == 401 { MainWireframe.logoutWarningAlert(message: "\(error.localizedDescription)") return } failure(error) } } } private func makeError(message: String, code: Int) -> Error { let errorInfo: [String: Any]? = [NSLocalizedDescriptionKey: message] return NSError.init(domain: "Network", code: code, userInfo: errorInfo) } }