]>
Commit | Line | Data |
---|---|---|
f67539c2 TL |
1 | /* |
2 | * Licensed to the Apache Software Foundation (ASF) under one | |
3 | * or more contributor license agreements. See the NOTICE file | |
4 | * distributed with this work for additional information | |
5 | * regarding copyright ownership. The ASF licenses this file | |
6 | * to you under the Apache License, Version 2.0 (the | |
7 | * "License"); you may not use this file except in compliance | |
8 | * with the License. You may obtain a copy of the License at | |
9 | * | |
10 | * http://www.apache.org/licenses/LICENSE-2.0 | |
11 | * | |
12 | * Unless required by applicable law or agreed to in writing, | |
13 | * software distributed under the License is distributed on an | |
14 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
15 | * KIND, either express or implied. See the License for the | |
16 | * specific language governing permissions and limitations | |
17 | * under the License. | |
18 | */ | |
19 | ||
20 | ||
21 | /// TErrorCode | |
22 | /// | |
23 | /// Protocol for TError conformers' enum's to conform to. | |
24 | /// Generic Int Thrift error code to allow error cases to have | |
25 | /// associated values. | |
26 | public protocol TErrorCode : CustomStringConvertible { | |
27 | var thriftErrorCode: Int { get } | |
28 | } | |
29 | ||
30 | /// TError | |
31 | /// | |
32 | /// Base protocol for all Thrift Error(Exception) types to conform to | |
33 | public protocol TError : Error, CustomStringConvertible { | |
34 | ||
35 | /// Enum for error cases. Can be typealiased to any conforming enum | |
36 | /// or defined nested. | |
37 | associatedtype Code: TErrorCode | |
38 | ||
39 | /// Error Case, value from internal enum | |
40 | var error: Code { get set } | |
41 | ||
42 | /// Optional additional message | |
43 | var message: String? { get set } | |
44 | ||
45 | /// Default error case for the error type, used for generic init() | |
46 | static var defaultCase: Code { get } | |
47 | ||
48 | init() | |
49 | } | |
50 | ||
51 | extension TError { | |
52 | /// Human readable description of error. Default provided for you in the | |
53 | /// format \(Self.self): \(error.errorDescription) \n message | |
54 | /// eg: | |
55 | /// | |
56 | /// TApplicationError (1): Invalid Message Type | |
57 | /// An unknown Error has occured. | |
58 | public var description: String { | |
59 | var out = "\(Self.self) (\(error.thriftErrorCode)): " + error.description + "\n" | |
60 | if let message = message { | |
61 | out += "Message: \(message)" | |
62 | } | |
63 | return out | |
64 | } | |
65 | ||
66 | /// Simple default Initializer for TError's | |
67 | /// | |
68 | /// - parameter error: ErrorCode value. Default: defaultCase | |
69 | /// - parameter message: Custom message with error. Optional | |
70 | /// | |
71 | /// - returns: <#return value description#> | |
72 | public init(error: Code, message: String? = nil) { | |
73 | self.init() | |
74 | self.error = error | |
75 | self.message = message | |
76 | } | |
77 | } |