blob: 79edba60249a586e332151059d1831212b601cd4 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
/// TErrorCode
///
/// Protocol for TError conformers' enum's to conform to.
/// Generic Int Thrift error code to allow error cases to have
/// associated values.
public protocol TErrorCode : CustomStringConvertible {
var thriftErrorCode: Int { get }
}
/// TError
///
/// Base protocol for all Thrift Error(Exception) types to conform to
public protocol TError : Error, CustomStringConvertible {
/// Enum for error cases. Can be typealiased to any conforming enum
/// or defined nested.
associatedtype Code: TErrorCode
/// Error Case, value from internal enum
var error: Code { get set }
/// Optional additional message
var message: String? { get set }
/// Default error case for the error type, used for generic init()
static var defaultCase: Code { get }
init()
}
extension TError {
/// Human readable description of error. Default provided for you in the
/// format \(Self.self): \(error.errorDescription) \n message
/// eg:
///
/// TApplicationError (1): Invalid Message Type
/// An unknown Error has occured.
public var description: String {
var out = "\(Self.self) (\(error.thriftErrorCode)): " + error.description + "\n"
if let message = message {
out += "Message: \(message)"
}
return out
}
/// Simple default Initializer for TError's
///
/// - parameter error: ErrorCode value. Default: defaultCase
/// - parameter message: Custom message with error. Optional
///
/// - returns: <#return value description#>
public init(error: Code, message: String? = nil) {
self.init()
self.error = error
self.message = message
}
}