11
22import Alamofire
33import Foundation
4- import Unbox
54
65/// A protocol to define network requests that map directly to response objects
76public protocol NetworkObjectRequest : NetworkRequest {
87 /// The type of the response object
98 associatedtype ResponseType : NetworkObjectResponse
109}
1110/// A protocol to define network response objects
12- public protocol NetworkObjectResponse : Unboxable {
13-
11+ public protocol NetworkObjectResponse : Decodable {
12+
1413}
1514
1615public extension NetworkObjectRequest {
@@ -23,7 +22,7 @@ public extension NetworkObjectRequest {
2322 /// - returns: The request that was sent
2423 @discardableResult
2524 public func responseObject( completionHandler: @escaping ( ( DataResponse < ResponseType > ) -> Void ) ) -> DataRequest {
26- return self . responseJSON { response in
25+ return self . responseData { response in
2726 self . processObjectResponse ( response: response, completionHandler: completionHandler)
2827 }
2928 }
@@ -38,7 +37,7 @@ public extension NetworkObjectRequest {
3837 /// - returns: The request that was sent
3938 @discardableResult
4039 public func uploadResponseObject( _ data: Data , completionHandler: @escaping ( ( DataResponse < ResponseType > ) -> Void ) ) -> UploadRequest {
41- return self . uploadResponseJSON ( data, completionHandler: { response in
40+ return self . uploadResponseData ( data, completionHandler: { response in
4241 self . processObjectResponse ( response: response, completionHandler: completionHandler)
4342 } )
4443 }
@@ -50,10 +49,8 @@ public extension NetworkObjectRequest {
5049 /// the `MultipartFormData`.
5150 /// - parameter completionHandler: A callback which is run on completion of
5251 /// the request
53- ///
54- /// - returns: The request that was sent
5552 public func uploadResponseObject( multipartFormData: @escaping ( ( MultipartFormData ) -> Void ) , completionHandler: @escaping ( ( DataResponse < ResponseType > ) -> Void ) ) {
56- return self . uploadResponseJSON ( multipartFormData: multipartFormData, completionHandler: { response in
53+ self . uploadResponseData ( multipartFormData: multipartFormData, completionHandler: { response in
5754 self . processObjectResponse ( response: response, completionHandler: completionHandler)
5855 } )
5956 }
@@ -67,22 +64,14 @@ public extension NetworkObjectRequest {
6764 /// - parameter response: The response to process
6865 /// - parameter completionHandler: A callback which is run once processing
6966 /// is complete
70- public func processObjectResponse( response: DataResponse < Any > , completionHandler: @escaping ( ( DataResponse < ResponseType > ) -> Void ) ) {
67+ public func processObjectResponse( response: DataResponse < Data > , completionHandler: @escaping ( ( DataResponse < ResponseType > ) -> Void ) ) {
7168 switch response. result {
7269 case . failure( let error) :
7370 self . complete ( error: error, response: response, completionHandler: completionHandler)
7471 case . success( let value) :
75- guard let value = value as? [ String : Any ] else {
76- let error = ResponseError . invalidResponse
77- self . complete ( error: error, response: response, completionHandler: completionHandler)
78- return
79- }
80-
8172 do {
82- let object : ResponseType = try unbox ( dictionary : value)
73+ let object = try JSONDecoder ( ) . decode ( ResponseType . self , from : value)
8374 self . complete ( object: object, response: response, completionHandler: completionHandler)
84- } catch let unboxError as UnboxError {
85- self . complete ( error: unboxError, response: response, completionHandler: completionHandler)
8675 } catch {
8776 let error = ResponseError . invalidResponse
8877 self . complete ( error: error, response: response, completionHandler: completionHandler)
0 commit comments