Emcee
38 строк · 1.5 Кб
1import Foundation
2
3public enum RequestSenderError: Error, CustomStringConvertible {
4case noData
5case unexpectedResponse(Data)
6case communicationError(Error)
7case parseError(Error, Data)
8case sessionIsClosed(URL)
9case cannotIssueRequest(Error)
10case credentialsNotUTF8
11case badStatusCode(Int, body: Data?)
12
13public var description: String {
14switch self {
15case .noData:
16return "Unexpected response: No data received"
17case .unexpectedResponse(let data):
18let string = String(data: data, encoding: .utf8) ?? "\(data.count) bytes"
19return "Unexpected response: \(string)"
20case .communicationError(let underlyingError):
21return "Response had an error: \(underlyingError)"
22case .parseError(let error, let data):
23let string = String(data: data, encoding: .utf8) ?? "\(data.count) bytes"
24return "Failed to parse response: \(error). Data: \(string)"
25case .sessionIsClosed(let url):
26return "Cannot send request to '\(url)' because session is closed"
27case .cannotIssueRequest(let error):
28return "Failed to issue request: \(error)"
29case .credentialsNotUTF8:
30return "Use UTF8 ecnoding for request credentials"
31case .badStatusCode(let code, let body):
32if let body = body, let bodyString = String(data: body, encoding: .utf8) {
33return "Bad status code \(code), body: \(bodyString)"
34}
35return "Bad status code: \(code)"
36}
37}
38}
39