Sources/OSS/Errors/ServerError.swift (67 lines of code) (raw):

import Foundation public struct ServerError: SdkErrorType { /// The status code of the response public let statusCode: Int /// The headers of the response public let headers: [String: String] /// information for errors, extact from response body public let errorFields: [String: String] /// The metohd and URL of the request public let requestTarget: String /// snapshot of the raw response body public let snapshot: Data? /// The time when this error occurred public let timestamp: Date /// The error code public var code: String { errorFields["Code"] ?? "BadErrorResponse" } /// The error message public var message: String { errorFields["Message"] ?? "" } /// The id that is used to identify the request. public var requestId: String { if let val = errorFields["RequestId"] { return val } if let val = headers[caseInsensitive: "x-oss-request-id"] { return val } return "" } /// A fine-grained error code. Each error cause corresponds to a unique error code. public var ec: String { if let val = errorFields["EC"] { return val } if let val = headers[caseInsensitive: "x-oss-ec"] { return val } return "" } /// Gets the Error instance that caused the current exception. public var innerError: Error? { nil } init( statusCode: Int, headers: [String: String], errorFields: [String: String], requestTarget: String, snapshot: Data? ) { self.statusCode = statusCode self.headers = headers self.errorFields = errorFields self.requestTarget = requestTarget self.snapshot = snapshot timestamp = Self.toServerTime(from: headers) } public var description: String { """ Error returned by Service. Http Status Code: \(statusCode) Error Code: \(code) Request Id: \(requestId) Message: \(message) EC: \(ec) Timestamp: \(timestamp) Request Endpoint: \(requestTarget) """ } private static func toServerTime(from headers: [String: String]) -> Date { var serverTime: Date? = nil if let dateStr = headers[caseInsensitive: "Date"] { serverTime = DateFormatter.rfc5322DateTime.date(from: dateStr) } return serverTime ?? Date() } }