88
99import Foundation
1010
11- public struct HttpMethod : Equatable , Hashable {
12- static let get = " GET "
13- static let post = " POST "
14- static let put = " PUT "
15- static let delete = " DELETE "
16- }
17-
18- public struct HttpHeaderFields
19- {
20- static let contentType = " content-type "
21- }
22-
23- public struct NetworkError : Error
11+ public struct HUNetworkError : Error
2412{
2513 let reason : String ?
2614 let httpStatusCode : Int ?
2715}
2816
29- public enum HttpMethods
17+ public enum HUHttpMethods : String
3018{
31- case get
32- case post
33- case put
34- case delete
19+ case get = " GET "
20+ case post = " POST "
21+ case put = " PUT "
22+ case delete = " DELETE "
3523}
3624
3725
@@ -55,24 +43,24 @@ public struct HttpUtility
5543
5644 public init ( ) { }
5745
58- public func request< T: Decodable > ( requestUrl: URL , method: HttpMethods , requestBody: Data ? = nil , resultType: T . Type , completionHandler: @escaping ( Result < T ? , NetworkError > ) -> Void )
46+ public func request< T: Decodable > ( requestUrl: URL , method: HUHttpMethods , requestBody: Data ? = nil , resultType: T . Type , completionHandler: @escaping ( Result < T ? , HUNetworkError > ) -> Void )
5947 {
6048 switch method
6149 {
6250 case . get:
63- getData ( requestUrl: requestUrl, resultType: T . self ) { completionHandler ( $0) }
51+ getData ( requestUrl: requestUrl, resultType: resultType ) { completionHandler ( $0) }
6452 break
6553
6654 case . post:
6755 postData ( requestUrl: requestUrl, requestBody: requestBody!, resultType: T . self) { completionHandler ( $0) }
6856 break
6957
7058 case . put:
71- putData ( requestUrl: requestUrl, resultType: T . self ) { completionHandler ( $0) }
59+ putData ( requestUrl: requestUrl, resultType: resultType ) { completionHandler ( $0) }
7260 break
7361
7462 case . delete:
75- deleteData ( requestUrl: requestUrl, resultType: T . self ) { completionHandler ( $0) }
63+ deleteData ( requestUrl: requestUrl, resultType: resultType ) { completionHandler ( $0) }
7664 break
7765 }
7866 }
@@ -103,77 +91,77 @@ public struct HttpUtility
10391 {
10492 let decoder = self . createJsonDecoder ( )
10593 do {
106- return try decoder. decode ( T . self , from: data)
94+ return try decoder. decode ( responseType , from: data)
10795 } catch let error{
10896 debugPrint ( " deocding error => \( error) " )
10997 }
11098 return nil
11199 }
112100
113- private func performOperation< T: Decodable > ( requestUrl: URLRequest , responseType: T . Type , completionHandler: @escaping ( Result < T ? , NetworkError > ) -> Void )
101+ private func performOperation< T: Decodable > ( requestUrl: URLRequest , responseType: T . Type , completionHandler: @escaping ( Result < T ? , HUNetworkError > ) -> Void )
114102 {
115103 URLSession . shared. dataTask ( with: requestUrl) { ( data, httpUrlResponse, error) in
116104
117105 let statusCode = ( httpUrlResponse as? HTTPURLResponse ) ? . statusCode
118106 if ( error == nil && data != nil && data? . count != 0 )
119107 {
120- let response = self . decodeJsonResponse ( data: data!, responseType: T . self )
108+ let response = self . decodeJsonResponse ( data: data!, responseType: responseType )
121109
122110 if ( response != nil ) {
123111 completionHandler ( . success( response) )
124112 } else {
125- completionHandler ( . failure( NetworkError ( reason: " decoding error " , httpStatusCode: statusCode) ) )
113+ completionHandler ( . failure( HUNetworkError ( reason: " decoding error " , httpStatusCode: statusCode) ) )
126114 }
127115 }
128116 else
129117 {
130- let networkError = NetworkError ( reason: error. debugDescription, httpStatusCode: statusCode)
118+ let networkError = HUNetworkError ( reason: error. debugDescription, httpStatusCode: statusCode)
131119 completionHandler ( . failure( networkError) )
132120 }
133121
134122 } . resume ( )
135123 }
136124
137125 // MARK: - GET Api
138- private func getData< T: Decodable > ( requestUrl: URL , resultType: T . Type , completionHandler: @escaping ( Result < T ? , NetworkError > ) -> Void )
126+ private func getData< T: Decodable > ( requestUrl: URL , resultType: T . Type , completionHandler: @escaping ( Result < T ? , HUNetworkError > ) -> Void )
139127 {
140128 var urlRequest = createUrlRequest ( requestUrl: requestUrl)
141- urlRequest. httpMethod = HttpMethod . get
129+ urlRequest. httpMethod = " get "
142130
143131 performOperation ( requestUrl: urlRequest, responseType: T . self) { ( result) in
144132 completionHandler ( result)
145133 }
146134 }
147135
148136 // MARK: - POST Api
149- private func postData< T: Decodable > ( requestUrl: URL , requestBody: Data , resultType: T . Type , completionHandler: @escaping ( Result < T ? , NetworkError > ) -> Void )
137+ private func postData< T: Decodable > ( requestUrl: URL , requestBody: Data , resultType: T . Type , completionHandler: @escaping ( Result < T ? , HUNetworkError > ) -> Void )
150138 {
151139 var urlRequest = createUrlRequest ( requestUrl: requestUrl)
152- urlRequest. httpMethod = HttpMethod . post
140+ urlRequest. httpMethod = " post "
153141 urlRequest. httpBody = requestBody
154- urlRequest. addValue ( " application/json " , forHTTPHeaderField: HttpHeaderFields . contentType )
142+ urlRequest. addValue ( " application/json " , forHTTPHeaderField: " content-type " )
155143
156144 performOperation ( requestUrl: urlRequest, responseType: T . self) { ( result) in
157145 completionHandler ( result)
158146 }
159147 }
160148
161149 // MARK: - PUT Api
162- private func putData< T: Decodable > ( requestUrl: URL , resultType: T . Type , completionHandler: @escaping ( Result < T ? , NetworkError > ) -> Void )
150+ private func putData< T: Decodable > ( requestUrl: URL , resultType: T . Type , completionHandler: @escaping ( Result < T ? , HUNetworkError > ) -> Void )
163151 {
164152 var urlRequest = createUrlRequest ( requestUrl: requestUrl)
165- urlRequest. httpMethod = HttpMethod . put
153+ urlRequest. httpMethod = " put "
166154
167155 performOperation ( requestUrl: urlRequest, responseType: T . self) { ( result) in
168156 completionHandler ( result)
169157 }
170158 }
171159
172160 // MARK: - DELETE Api
173- private func deleteData< T: Decodable > ( requestUrl: URL , resultType: T . Type , completionHandler: @escaping ( Result < T ? , NetworkError > ) -> Void )
161+ private func deleteData< T: Decodable > ( requestUrl: URL , resultType: T . Type , completionHandler: @escaping ( Result < T ? , HUNetworkError > ) -> Void )
174162 {
175163 var urlRequest = createUrlRequest ( requestUrl: requestUrl)
176- urlRequest. httpMethod = HttpMethod . delete
164+ urlRequest. httpMethod = " delete "
177165
178166 performOperation ( requestUrl: urlRequest, responseType: T . self) { ( result) in
179167 completionHandler ( result)
0 commit comments