Skip to content

Commit 13b697f

Browse files
committed
Adds comprehensive error handling
Improves error handling in network requests by adding specific error cases for encoding, decoding, and network issues. This change ensures that errors during request configuration, data decoding, and network communication are properly caught and wrapped in a `NetworkError` enum, providing more informative error messages to the user.
1 parent fbc28d0 commit 13b697f

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

Sources/Service/NetworkService.swift

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,11 @@ public enum Network {
7373
extension Network.Service: NetworkServiceProtocol {
7474
public func request<DataModel: Decodable>(_ request: Requestable, logResponse: Bool = true) async throws -> DataModel {
7575
let (data, _) = try await makeDataRequest(request, logResponse: logResponse)
76-
return try decoder.decode(DataModel.self, from: data)
76+
do {
77+
return try decoder.decode(DataModel.self, from: data)
78+
} catch {
79+
throw NetworkError.decodingError(error)
80+
}
7781
}
7882

7983
public func data(_ request: Requestable, logResponse: Bool = true) async throws -> Data {
@@ -96,8 +100,20 @@ extension Network.Service: NetworkServiceProtocol {
96100
// MARK: - Private functions
97101
private extension Network.Service {
98102
func makeDataRequest(_ request: Requestable, logResponse: Bool) async throws -> (Data, URLResponse) {
99-
let urlRequest = try request.configure(withServer: server)
100-
let (data, response) = try await session.data(for: urlRequest)
103+
let urlRequest: URLRequest
104+
do {
105+
urlRequest = try request.configure(withServer: server)
106+
} catch {
107+
throw NetworkError.encodingError(error)
108+
}
109+
110+
let (data, response): (Data, URLResponse)
111+
do {
112+
(data, response) = try await session.data(for: urlRequest)
113+
} catch {
114+
throw NetworkError.networkError(error)
115+
}
116+
101117
if logResponse {
102118
String.logResponse((data, response), printJSON: logResponse)
103119
}
@@ -120,6 +136,7 @@ public extension Network.Service {
120136
case invalidURL
121137
case badServerResponse(Int)
122138
case decodingError(Error)
139+
case encodingError(Error)
123140
case networkError(Error)
124141

125142
public var errorDescription: String? {
@@ -130,6 +147,8 @@ public extension Network.Service {
130147
"Server returned status code: \(code)"
131148
case .decodingError(let error):
132149
"Failed to decode data: \(error.localizedDescription)"
150+
case .encodingError(let error):
151+
"Failed to encode data: \(error.localizedDescription)"
133152
case .networkError(let error):
134153
"Network error: \(error.localizedDescription)"
135154
}

0 commit comments

Comments
 (0)