Skip to content

Commit 9e16a49

Browse files
Pass along decode error information so that it can be diagnosed
Contributes to IOS-761
1 parent fb95f93 commit 9e16a49

6 files changed

Lines changed: 26 additions & 8 deletions

File tree

Mastodon/Scene/Discovery/News/DiscoveryNewsViewModel.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ extension DiscoveryNewsViewModel {
5858
query: .init(offset: nil, limit: nil),
5959
authenticationBox: authenticationBox
6060
)
61-
} catch let error as Mastodon.API.Error where error.httpResponseStatus.code == 404 {
61+
} catch let error as Mastodon.API.Error where error.httpResponseStatus?.code == 404 {
6262
isServerSupportEndpoint = false
6363
} catch {
6464
// do nothing

MastodonSDK/Sources/MastodonCore/Extension/MastodonSDK/Mastodon+Entity+Error.swift

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@ extension Mastodon.API.Error: LocalizedError {
1212

1313
public var errorDescription: String? {
1414
guard let mastodonError = mastodonError else {
15-
return "HTTP \(httpResponseStatus.code)"
15+
if let httpResponseStatus {
16+
return "HTTP \(httpResponseStatus.code)"
17+
} else {
18+
return nil
19+
}
1620
}
1721
switch mastodonError {
1822
case .generic(let error):
@@ -21,12 +25,18 @@ extension Mastodon.API.Error: LocalizedError {
2125
} else {
2226
return error.error
2327
}
28+
case .decodeError(let message):
29+
return message
2430
}
2531
}
2632

2733
public var failureReason: String? {
2834
guard let mastodonError = mastodonError else {
29-
return httpResponseStatus.reasonPhrase
35+
if let httpResponseStatus {
36+
return httpResponseStatus.reasonPhrase
37+
} else {
38+
return nil
39+
}
3040
}
3141
switch mastodonError {
3242
case .generic(let error):
@@ -35,6 +45,8 @@ extension Mastodon.API.Error: LocalizedError {
3545
} else {
3646
return error.errorDescription
3747
}
48+
case .decodeError(let message):
49+
return message
3850
}
3951
}
4052

MastodonSDK/Sources/MastodonCore/Service/API/APIService+APIError.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ extension APIService.APIError: LocalizedError {
5353
guard error.httpResponseStatus != .ok else {
5454
return "Unknown Error"
5555
}
56-
return error.httpResponseStatus.reasonPhrase
56+
return error.httpResponseStatus?.reasonPhrase
5757
}
5858

5959
return responseError.errorDescription

MastodonSDK/Sources/MastodonSDK/API/Error/Mastodon+API+Error+MastodonAPIError.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import Foundation
1010
extension Mastodon.API.Error {
1111
public enum MastodonError: Swift.Error {
1212
case generic(error: Mastodon.Entity.Error)
13+
case decodeError(message: String)
1314

1415
init(error: Mastodon.Entity.Error) {
1516
self = .generic(error: error)
@@ -24,13 +25,17 @@ extension Mastodon.API.Error.MastodonError: LocalizedError {
2425
switch self {
2526
case .generic(let error):
2627
return error.error
28+
case .decodeError(let message):
29+
return message
2730
}
2831
}
2932

3033
public var failureReason: String? {
3134
switch self {
3235
case .generic(let error):
3336
return error.errorDescription
37+
case .decodeError(let message):
38+
return message
3439
}
3540
}
3641

MastodonSDK/Sources/MastodonSDK/API/Error/Mastodon+API+Error.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ import enum NIOHTTP1.HTTPResponseStatus
1111
extension Mastodon.API {
1212
public struct Error: Swift.Error {
1313

14-
public var httpResponseStatus: HTTPResponseStatus
14+
public var httpResponseStatus: HTTPResponseStatus?
1515
public var mastodonError: MastodonError?
1616

1717
init(
18-
httpResponseStatus: HTTPResponseStatus,
18+
httpResponseStatus: HTTPResponseStatus?,
1919
mastodonError: Mastodon.API.Error.MastodonError?
2020
) {
2121
self.httpResponseStatus = httpResponseStatus

MastodonSDK/Sources/MastodonSDK/API/Mastodon+API.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,13 +246,14 @@ extension Mastodon.API {
246246
do {
247247
return try Mastodon.API.decoder.decode(type, from: data)
248248
} catch let decodeError {
249+
let fullErrorDescription = "URL: \(String(describing: response.url))\nData: \(String(data: data, encoding: .utf8) ?? "-")\nError:\(decodeError)\n----\n"
249250
#if DEBUG
250-
debugPrint("URL: \(String(describing: response.url))\nData: \(String(data: data, encoding: .utf8) ?? "-")\nError:\(decodeError)\n----\n")
251+
debugPrint(fullErrorDescription)
251252
#endif
252253

253254
guard let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode != 200 else {
254255
assertionFailure()
255-
throw decodeError
256+
throw Mastodon.API.Error(httpResponseStatus: nil, mastodonError: .decodeError(message: fullErrorDescription))
256257
}
257258

258259
let httpResponseStatus = HTTPResponseStatus(statusCode: httpURLResponse.statusCode)

0 commit comments

Comments
 (0)