@@ -16,31 +16,31 @@ public struct HttpUtility
1616
1717 private init ( ) { }
1818
19- public func request< T: Decodable > ( requestUrl : URL , method : HUHttpMethods , requestBody : Data ? = nil , resultType: T . Type , completionHandler: @escaping ( Result < T ? , HUNetworkError > ) -> Void )
19+ public func request< T: Decodable > ( huRequest : HURequest , resultType: T . Type , completionHandler: @escaping ( Result < T ? , HUNetworkError > ) -> Void )
2020 {
21- switch method
21+ switch huRequest . method
2222 {
2323 case . get:
24- getData ( requestUrl: requestUrl , resultType: resultType) { completionHandler ( $0) }
24+ getData ( requestUrl: huRequest . url , resultType: resultType) { completionHandler ( $0) }
2525 break
2626
2727 case . post:
28- postData ( requestUrl : requestUrl , requestBody : requestBody! , resultType: T . self ) { completionHandler ( $0) }
28+ postData ( request : huRequest , resultType: resultType ) { completionHandler ( $0) }
2929 break
3030
3131 case . put:
32- putData ( requestUrl: requestUrl , resultType: resultType) { completionHandler ( $0) }
32+ putData ( requestUrl: huRequest . url , resultType: resultType) { completionHandler ( $0) }
3333 break
3434
3535 case . delete:
36- deleteData ( requestUrl: requestUrl , resultType: resultType) { completionHandler ( $0) }
36+ deleteData ( requestUrl: huRequest . url , resultType: resultType) { completionHandler ( $0) }
3737 break
3838 }
3939 }
4040
4141 // MARK: - Multipart
42- public func requestWithMultiPartFormData< T: Decodable > ( huRequest : HURequest , responseType: T . Type , completionHandler: @escaping ( Result < T ? , HUNetworkError > ) -> Void ) {
43- postMultiPartFormData ( huRequest : huRequest ) { completionHandler ( $0) }
42+ public func requestWithMultiPartFormData< T: Decodable > ( multiPartRequest : HUMultiPartRequest , responseType: T . Type , completionHandler: @escaping ( Result < T ? , HUNetworkError > ) -> Void ) {
43+ postMultiPartFormData ( request : multiPartRequest ) { completionHandler ( $0) }
4444 }
4545
4646 // MARK: - Private functions
@@ -66,9 +66,9 @@ public struct HttpUtility
6666 private func decodeJsonResponse< T: Decodable > ( data: Data , responseType: T . Type ) -> T ?
6767 {
6868 let decoder = createJsonDecoder ( )
69- do {
69+ do {
7070 return try decoder. decode ( responseType, from: data)
71- } catch let error{
71+ } catch let error {
7272 debugPrint ( " deocding error => \( error. localizedDescription) " )
7373 }
7474 return nil
@@ -86,29 +86,29 @@ public struct HttpUtility
8686 }
8787
8888 // MARK: - POST Api
89- private func postData< T: Decodable > ( requestUrl : URL , requestBody : Data , resultType: T . Type , completionHandler: @escaping ( Result < T ? , HUNetworkError > ) -> Void )
89+ private func postData< T: Decodable > ( request : HURequest , resultType: T . Type , completionHandler: @escaping ( Result < T ? , HUNetworkError > ) -> Void )
9090 {
91- var urlRequest = self . createUrlRequest ( requestUrl: requestUrl )
91+ var urlRequest = self . createUrlRequest ( requestUrl: request . url )
9292 urlRequest. httpMethod = HUHttpMethods . post. rawValue
93- urlRequest. httpBody = requestBody
93+ urlRequest. httpBody = request . requestBody
9494 urlRequest. addValue ( " application/json " , forHTTPHeaderField: " content-type " )
9595
9696 performOperation ( requestUrl: urlRequest, responseType: T . self) { ( result) in
9797 completionHandler ( result)
9898 }
9999 }
100100
101- private func postMultiPartFormData< T: Decodable > ( huRequest : HURequest , completionHandler: @escaping ( Result < T ? , HUNetworkError > ) -> Void )
101+ private func postMultiPartFormData< T: Decodable > ( request : HUMultiPartRequest , completionHandler: @escaping ( Result < T ? , HUNetworkError > ) -> Void )
102102 {
103103 let boundary = " ----------------------------- \( UUID ( ) . uuidString) "
104104 let lineBreak = " \r \n "
105- var urlRequest = self . createUrlRequest ( requestUrl: huRequest . url)
105+ var urlRequest = self . createUrlRequest ( requestUrl: request . url)
106106 urlRequest. httpMethod = HUHttpMethods . post. rawValue
107107 urlRequest. addValue ( " multipart/form-data; boundary= \( boundary) " , forHTTPHeaderField: " Content-Type " )
108108
109109 var postBody = Data ( )
110110
111- let requestDictionary = huRequest . request. convertToDictionary ( )
111+ let requestDictionary = request . request. convertToDictionary ( )
112112 if ( requestDictionary != nil )
113113 {
114114 requestDictionary? . forEach ( { ( key, value) in
@@ -122,6 +122,17 @@ public struct HttpUtility
122122 }
123123 } )
124124
125+ // TODO: Next release
126+ // if(huRequest.media != nil) {
127+ // huRequest.media?.forEach({ (media) in
128+ // postBody.append("--\(boundary + lineBreak)" .data(using: .utf8)!)
129+ // postBody.append("Content-Disposition: form-data; name=\"\(media.parameterName)\"; filename=\"\(media.fileName)\" \(lineBreak + lineBreak)" .data(using: .utf8)!)
130+ // postBody.append("Content-Type: \(media.mimeType + lineBreak + lineBreak)" .data(using: .utf8)!)
131+ // postBody.append(media.data)
132+ // postBody.append(lineBreak .data(using: .utf8)!)
133+ // })
134+ // }
135+
125136 postBody. append ( " -- \( boundary) -- \( lineBreak) " . data ( using: . utf8) !)
126137
127138 urlRequest. addValue ( " \( postBody. count) " , forHTTPHeaderField: " Content-Length " )
@@ -161,18 +172,16 @@ public struct HttpUtility
161172 URLSession . shared. dataTask ( with: requestUrl) { ( data, httpUrlResponse, error) in
162173
163174 let statusCode = ( httpUrlResponse as? HTTPURLResponse ) ? . statusCode
164- debugPrint ( String ( data: data!, encoding: . utf8) !)
165175 if ( error == nil && data != nil && data? . count != 0 ) {
166176 let response = self . decodeJsonResponse ( data: data!, responseType: responseType)
167177 if ( response != nil ) {
168178 completionHandler ( . success( response) )
169179 } else {
170- let responseJsonString = String ( data: data!, encoding: . utf8)
171- completionHandler ( . failure( HUNetworkError ( reason: " error = \( String ( describing: responseJsonString) ) " , httpStatusCode: statusCode) ) )
180+ completionHandler ( . failure( HUNetworkError ( withServerResponse: data, forRequestUrl: requestUrl. url!, withHttpBody: requestUrl. httpBody, errorMessage: error. debugDescription, forStatusCode: statusCode!) ) )
172181 }
173182 }
174183 else {
175- let networkError = HUNetworkError ( reason : error. debugDescription, httpStatusCode : statusCode)
184+ let networkError = HUNetworkError ( withServerResponse : data , forRequestUrl : requestUrl . url! , withHttpBody : requestUrl . httpBody , errorMessage : error. debugDescription, forStatusCode : statusCode! )
176185 completionHandler ( . failure( networkError) )
177186 }
178187
0 commit comments