@@ -8,11 +8,17 @@ import Foundation
8
8
9
9
typealias SendRequestValue = [ AnyHashable : Any ]
10
10
11
- struct SendRequestErrorType {
11
+ struct SendRequestError : Error {
12
12
let errorMessage : String ?
13
13
let data : Data ?
14
14
}
15
15
16
+ extension SendRequestError : LocalizedError {
17
+ var localizedDescription : String {
18
+ return errorMessage ?? " "
19
+ }
20
+ }
21
+
16
22
enum Result < Value, ErrorType> {
17
23
case value( Value )
18
24
case error( ErrorType )
@@ -54,15 +60,15 @@ extension URLSession : NetworkSessionProtocol {
54
60
}
55
61
56
62
struct NetworkHelper {
57
- static func sendRequest( _ request: URLRequest , usingSession networkSession: NetworkSessionProtocol ) -> Promise < SendRequestValue , SendRequestErrorType > {
58
- let result = Promise < SendRequestValue , SendRequestErrorType > ( )
63
+ static func sendRequest( _ request: URLRequest , usingSession networkSession: NetworkSessionProtocol ) -> Promise < SendRequestValue , SendRequestError > {
64
+ let result = Promise < SendRequestValue , SendRequestError > ( )
59
65
60
66
networkSession. makeRequest ( request) { ( data, response, error) in
61
67
if let error = error {
62
- return result. reject ( with: SendRequestErrorType ( errorMessage: " \( error. localizedDescription) " , data: data) )
68
+ return result. reject ( with: SendRequestError ( errorMessage: " \( error. localizedDescription) " , data: data) )
63
69
}
64
70
guard let response = response as? HTTPURLResponse else {
65
- return result. reject ( with: SendRequestErrorType ( errorMessage: " No response " , data: nil ) )
71
+ return result. reject ( with: SendRequestError ( errorMessage: " No response " , data: nil ) )
66
72
}
67
73
68
74
let responseCode = response. statusCode
@@ -82,33 +88,33 @@ struct NetworkHelper {
82
88
}
83
89
84
90
if responseCode == 401 {
85
- return result. reject ( with: SendRequestErrorType ( errorMessage: " Invalid API Key " , data: data) )
91
+ return result. reject ( with: SendRequestError ( errorMessage: " Invalid API Key " , data: data) )
86
92
} else if responseCode >= 400 {
87
93
var errorMessage = " Invalid Request "
88
94
if let jsonDict = json as? [ AnyHashable : Any ] , let msgFromDict = jsonDict [ " msg " ] as? String {
89
95
errorMessage = msgFromDict
90
96
} else if responseCode >= 500 {
91
97
errorMessage = " Internal Server Error "
92
98
}
93
- return result. reject ( with: SendRequestErrorType ( errorMessage: errorMessage, data: data) )
99
+ return result. reject ( with: SendRequestError ( errorMessage: errorMessage, data: data) )
94
100
} else if responseCode == 200 {
95
101
if let data = data, data. count > 0 {
96
102
if let jsonError = jsonError {
97
103
var reason = " Could not parse json, error: \( jsonError. localizedDescription) "
98
104
if let stringValue = String ( data: data, encoding: . utf8) {
99
105
reason = " Could not parse json: \( stringValue) , error: \( jsonError. localizedDescription) "
100
106
}
101
- return result. reject ( with: SendRequestErrorType ( errorMessage: reason, data: data) )
107
+ return result. reject ( with: SendRequestError ( errorMessage: reason, data: data) )
102
108
} else if let json = json as? [ AnyHashable : Any ] {
103
109
return result. resolve ( with: json)
104
110
} else {
105
- return result. reject ( with: SendRequestErrorType ( errorMessage: " Response is not a dictionary " , data: data) )
111
+ return result. reject ( with: SendRequestError ( errorMessage: " Response is not a dictionary " , data: data) )
106
112
}
107
113
} else {
108
- return result. reject ( with: SendRequestErrorType ( errorMessage: " No data received " , data: data) )
114
+ return result. reject ( with: SendRequestError ( errorMessage: " No data received " , data: data) )
109
115
}
110
116
} else {
111
- return result. reject ( with: SendRequestErrorType ( errorMessage: " Received non-200 response: \( responseCode) " , data: data) )
117
+ return result. reject ( with: SendRequestError ( errorMessage: " Received non-200 response: \( responseCode) " , data: data) )
112
118
}
113
119
}
114
120
0 commit comments