KukaiError
public struct KukaiError : CustomStringConvertible, Error
A struct conforming to Error
, attempting to handle errors from all sources (RPC, network, OS, other services/components/libraries), without the implementing code having to deal with each layer themselves.
Comes with helpers to extract meaning from RPC errors, optionally includes all the network data that caused the error for easier retrieval, and a fallback human readbale description
to ensure something useful is always shown to the user.
-
Categories of errors that are possible
See moreDeclaration
Swift
public enum ErrorType : Equatable
-
The error category
Declaration
Swift
public let errorType: ErrorType
-
Declaration
Swift
public let knownErrorMessage: String?
-
Optional error subType coming from another source (the OS, URLSession, another library etc)
Declaration
Swift
public let subType: Error?
-
Optional string containing only the relvant portion of an RPC error (e.g instead of “proto.xxxxxxxx.gas_exhausted.operation”, it would contain “gas_exhausted.operation”) to make parsing easier
Declaration
Swift
public let rpcErrorString: String?
-
Optional object containing smart contract failure casues. May contain an Int (error code), a String (semi human readbale error message), and/or a dictionary containing metadata
Declaration
Swift
public let failWith: FailWith?
-
The requested URL that returned the error
Declaration
Swift
public var requestURL: URL?
-
The JSON that was sent as part of the request
Declaration
Swift
public var requestJSON: String?
-
The raw JSON that was returned
Declaration
Swift
public var responseJSON: String?
-
The HTTP status code returned
Declaration
Swift
public var httpStatusCode: Int?
-
Create a KukaiError from an RPC string (will not be validated). You can use the string extension
.removeLeadingProtocolFromRPCError()
to strip the leading poriton of the errorDeclaration
Swift
public static func rpcError(rpcErrorString: String, andFailWith: FailWith?, requestURL: URL?) -> KukaiError
-
Create a KukaiError denoting a sytem issue from the OS, by passing in the system Error type
Declaration
Swift
public static func systemError(subType: Error) -> KukaiError
-
Create a KukaiError denoting a network issue, by passing in the HTTP status code
Declaration
Swift
public static func networkError(statusCode: Int, requestURL: URL) -> KukaiError
-
Create a KukaiError denoting an issue from some other component or library, by passing in the error that piece of code returned
Declaration
Swift
public static func internalApplicationError(error: Error) -> KukaiError
-
Create a KukaiError denoting an issue from some other component or library, by passing in the error that piece of code returned
Declaration
Swift
public static func decodingError(error: Error) -> KukaiError
-
Create a KukaiError allowing a client to simply provide the required error message. E.g. In situations where GraphQL returns a malformed object instead of an error, resulting in a decodingError, a client can catch that, supress it, and instead reutrn an error explaining that this record couldn’t be found
Declaration
Swift
public static func knownErrorMessage(_ message: String) -> KukaiError
-
Create an unknown KukaiError
Declaration
Swift
public static func unknown(withString: String? = nil) -> KukaiError
-
For network errors, attach all the necessary network data that may be needed in order to debug the issue, or log to a tool such as sentry
Declaration
Swift
public mutating func addNetworkData(requestURL: URL?, requestJSON: Data?, responseJSON: Data?, httpStatusCode: Int?)
-
Prints the underlying error type with either an RPC string, or an underlying Error object contents
Declaration
Swift
public var description: String { get }
-
Declaration
Swift
public func checkErrorForKnownCase(_ err: Error) -> String?
-
Declaration
Swift
public func messageForNetworkStatusCode(statusCode: Int, url: URL) -> String
-
Allow the delegate of the error callback the ability to decide what errors to log or not by detecting the high level type of error being generated
Declaration
Swift
public func isTimeout() -> Bool