@@ -12,6 +12,7 @@ public typealias NetworkCompletion<T> = (_ response: Result<T, Error>) -> Void
1212
1313public 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
1718public 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