@@ -35,10 +35,11 @@ public class NetworkLayer: NSObject, URLSessionDataDelegate {
3535 */
3636 public enum Result < T> where T: ResponseBodyParsable {
3737 /// Returns response.
38- case success( T )
38+ case success( APIResponse < T > )
3939 /// Returns reason of the error.
40- case error( NSError )
40+ case error( APIError < T > )
4141 }
42+
4243
4344 // MARK: - Properties
4445
@@ -103,7 +104,7 @@ public class NetworkLayer: NSObject, URLSessionDataDelegate {
103104 NotificationCenter . default. removeObserver ( self )
104105 }
105106
106- // MARK: Public Methods
107+ // MARK: Internal Methods
107108
108109 /**
109110 Executes configured API.
@@ -112,14 +113,14 @@ public class NetworkLayer: NSObject, URLSessionDataDelegate {
112113 - parameter error: Returns reason of the error if operation fails. `nil` otherwise
113114 - parameter response: Returns response with the specified type of response
114115 */
115- public class func execute< T> ( _ request: APIConfiguration < T > , completion: @escaping ( Result < T > ) -> ( ) ) where T: ResponseBodyParsable {
116+ internal class func execute< T> ( _ request: APIConfiguration < T > , completion: @escaping ( Result < T > ) -> ( ) ) where T: ResponseBodyParsable {
116117 let instance = NetworkLayer . shared
117118 DispatchQueue . global ( ) . async {
118119 guard let urlRequest = request. request else {
119120 let err = NSError ( domain: " " , code: 500 , description: " Cannot create URL Request with specified configurations " )
120121 instance. sendLog ( message: err. localizedDescription, logType: . error( code: 900 , name: err. localizedDescription) )
121122 DispatchQueue . main. async {
122- completion ( . error( err) )
123+ completion ( . error( APIError ( request : request , error : err) ) )
123124 }
124125 return
125126 }
@@ -144,7 +145,7 @@ public class NetworkLayer: NSObject, URLSessionDataDelegate {
144145 } else {
145146 instance. sendLog ( message: " Operation: \( operation. identifier) failed with error: \( error. localizedDescription) " , logType: . error( code: ( error as NSError ) . code, name: error. localizedDescription) )
146147 DispatchQueue . main. async {
147- completion ( . error( error as NSError ) )
148+ completion ( . error( . init ( request : request , error: error as NSError ) ) )
148149 }
149150 return
150151 }
@@ -155,7 +156,7 @@ public class NetworkLayer: NSObject, URLSessionDataDelegate {
155156 guard let data = dataResult, let loadResponse = loadedResponse else {
156157 let err = NSError ( domain: " " , code: 500 , description: " Data is empty - Operation: \( operation. identifier) " )
157158 DispatchQueue . main. async {
158- completion ( . error( err) )
159+ completion ( . error( . init ( request : request , error : err) ) )
159160 }
160161 return
161162 }
@@ -189,6 +190,8 @@ public class NetworkLayer: NSObject, URLSessionDataDelegate {
189190 }
190191 }
191192
193+ // MARK: Private Methods
194+
192195 /// Proceeds the response and completes.
193196 private func proceedResponse< T> ( response: URLResponse , data: Data ,
194197 operationId: Int ,
@@ -201,7 +204,7 @@ public class NetworkLayer: NSObject, URLSessionDataDelegate {
201204 self . _cache? . changeCacheExpiry ( for: request. request!, to: cacheTiming)
202205 }
203206 DispatchQueue . main. async {
204- completion ( . success( dataObject) )
207+ completion ( . success( APIResponse ( response : response , responseBody : dataObject) ) )
205208 }
206209 return
207210 }
@@ -214,26 +217,24 @@ public class NetworkLayer: NSObject, URLSessionDataDelegate {
214217 self . _cache? . changeCacheExpiry ( for: request. request!, to: cacheTiming)
215218 }
216219 DispatchQueue . main. async {
217- completion ( . success( responseObject) )
220+ completion ( . success( APIResponse ( response : response , responseBody : responseObject) ) )
218221 }
219222 } else {
220223 DispatchQueue . main. async {
221224 let err = NSError ( domain: " " , code: 500 , description: " Cannot create response body - Operation: \( operationId) " )
222- completion ( . error( err) )
225+ completion ( . error( . init ( request : request , error : err) ) )
223226 }
224227 }
225228 } catch {
226229 self . sendLog ( message: " Couldn't create JSON Data from Operation: \( operationId) - Error: \( error. localizedDescription) " ,
227230 logType: . error( code: 900 , name: error. localizedDescription) )
228231 DispatchQueue . main. async {
229232 let err = NSError ( domain: " " , code: 500 , description: error. localizedDescription)
230- completion ( . error( err) )
233+ completion ( . error( . init ( request : request , error : err) ) )
231234 }
232235 }
233236 }
234-
235- // MARK: Private Methods
236-
237+
237238 /**
238239 Sends logs to listener. Shouldn't be called outside of the `NetworkLayer`.
239240 - parameter message: Log message
0 commit comments