Skip to content

Commit 65b6da5

Browse files
committed
code refractor for httpUtility
1 parent 90cbb6a commit 65b6da5

File tree

1 file changed

+24
-36
lines changed

1 file changed

+24
-36
lines changed

HttpUtility/HttpUtility.swift

Lines changed: 24 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -8,30 +8,18 @@
88

99
import 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

Comments
 (0)