Advertisement
Guest User

Untitled

a guest
Jun 24th, 2019
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.57 KB | None | 0 0
  1. class Network<T: Requestable> {
  2.     let mainRequest: T
  3.  
  4.     init(mainRequest: T) {
  5.         self.mainRequest = mainRequest
  6.     }
  7.  
  8.     func makeRequest(completionHandler: @escaping (Swift.Result<T.ResponseType, NetworkingError>) -> ()) {
  9.         let url = mainRequest.baseUrl.appendingPathComponent(mainRequest.endpoint)
  10.         let request = prepareRequest(for: url, req: mainRequest)
  11.         Alamofire.request(request).responseJSON { (response) in
  12.             guard let statusCode = response.response?.statusCode else { return }
  13.             if statusCode >= 500 {
  14.                 completionHandler(.failure(.serverError))
  15.                 return
  16.             }
  17.  
  18.             if statusCode >= 400 {
  19.                 if statusCode == 401 {
  20.                     completionHandler(.failure(.unauthorized))
  21.                     return
  22.                 }
  23.  
  24.                 if statusCode == 429 {
  25.                     completionHandler(.failure(.errorMessage))
  26.                     //TODO: Add retry
  27.                     return
  28.                 }
  29.                 completionHandler(.failure(.serverError))
  30.                 return
  31.             }
  32.  
  33.             if let data = response.data {
  34.                 let decoder = JSONDecoder()
  35.                 do {
  36.                     let object = try decoder.decode(T.ResponseType.self, from: data)
  37.                     completionHandler(Swift.Result.success(object))
  38.                 } catch let error {
  39.                     completionHandler(.failure(.errorMessage))
  40.                     print(error)
  41.                 }
  42.             }
  43.         }
  44.     }
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement