Skip to content

Commit acdbf2f

Browse files
Merge pull request #6 from GabrielSilveiraa/feature/add_headers_endpoint_parameter
Add headers as endpoint's parameter
2 parents 23c4411 + 96011c2 commit acdbf2f

3 files changed

Lines changed: 30 additions & 3 deletions

File tree

GMSNetworkLayer.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Pod::Spec.new do |spec|
22

33
spec.name = "GMSNetworkLayer"
4-
spec.version = "1.2.0"
4+
spec.version = "1.3.0"
55
spec.summary = "Stylish HTTP Networking in Swift."
66

77
spec.homepage = "https://github.com/GabrielSilveiraa/GMSNetworkLayer"

Sources/GMSNewtorkLayer/EndPointType.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,6 @@ public protocol EndPointType {
1313
var path: String { get }
1414
var httpMethod: HTTPMethod { get }
1515
var encoding: ParameterEncoding? { get }
16-
var parameters: [String: Any] { get }
16+
var parameters: [String: AnyObject]? { get }
17+
var headers: [String: String]? { get }
1718
}

Sources/GMSNewtorkLayer/NetworkManager.swift

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public typealias NetworkCompletion<T> = (_ response: Result<T, Error>) -> Void
1212

1313
public protocol NetworkManagerProtocol: AnyObject {
1414
func request<T: Decodable>(_ route: EndPointType, completion: @escaping NetworkCompletion<T>)
15+
func request<T: Decodable>(_ route: EndPointType) async throws -> Result<T, Error>
1516
}
1617

1718
public class NetworkManager {
@@ -32,7 +33,8 @@ public class NetworkManager {
3233
cachePolicy: .reloadIgnoringLocalAndRemoteCacheData,
3334
timeoutInterval: 10.0)
3435
request.httpMethod = route.httpMethod.rawValue
35-
36+
request.allHTTPHeaderFields = route.headers
37+
3638
if let encoding = route.encoding {
3739
try encoding.encode(urlRequest: &request, parameters: route.parameters)
3840
}
@@ -102,4 +104,28 @@ extension NetworkManager: NetworkManagerProtocol {
102104
}
103105
task?.resume()
104106
}
107+
108+
public func request<T: Decodable>(_ route: EndPointType) async throws -> Result<T, Error> {
109+
let request = try self.buildRequest(from: route)
110+
let (data, response) = try await session.data(for: request)
111+
guard let response = response as? HTTPURLResponse else {
112+
return .failure(NetworkError.noResponse)
113+
}
114+
115+
let result = self.handleNetworkResponse(response)
116+
switch result {
117+
case .success:
118+
do {
119+
let jsonResponse = try self.jsonDecoder.decode(T.self, from: data)
120+
return .success(jsonResponse)
121+
} catch {
122+
self.handleLogging(error: error)
123+
return .failure(NetworkError.unableToDecode)
124+
}
125+
126+
case .failure(let error):
127+
self.handleLogging(error: error)
128+
return .failure(error)
129+
}
130+
}
105131
}

0 commit comments

Comments
 (0)