Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Network<T: Requestable> {
- let mainRequest: T
- init(mainRequest: T) {
- self.mainRequest = mainRequest
- }
- func makeRequest(completionHandler: @escaping (Swift.Result<T.ResponseType, NetworkingError>) -> ()) {
- let url = mainRequest.baseUrl.appendingPathComponent(mainRequest.endpoint)
- let request = prepareRequest(for: url, req: mainRequest)
- Alamofire.request(request).responseJSON { (response) in
- guard let statusCode = response.response?.statusCode else { return }
- if statusCode >= 500 {
- completionHandler(.failure(.serverError))
- return
- }
- if statusCode >= 400 {
- if statusCode == 401 {
- completionHandler(.failure(.unauthorized))
- return
- }
- if statusCode == 429 {
- completionHandler(.failure(.errorMessage))
- //TODO: Add retry
- return
- }
- completionHandler(.failure(.serverError))
- return
- }
- if let data = response.data {
- let decoder = JSONDecoder()
- do {
- let object = try decoder.decode(T.ResponseType.self, from: data)
- completionHandler(Swift.Result.success(object))
- } catch let error {
- completionHandler(.failure(.errorMessage))
- print(error)
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement