Skip to content

Commit f93f005

Browse files
committed
Make GenericError conform to Catching + improve error messages for caught
1 parent 87e3088 commit f93f005

File tree

10 files changed

+41
-11
lines changed

10 files changed

+41
-11
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,7 @@ enum AppError: Throwable, Catching {
383383
case .invalidConfiguration:
384384
return String(localized: "The app configuration is invalid.")
385385
case .caught(let error):
386-
return error.localizedDescription
386+
return ErrorKit.userFriendlyMessage(for: error)
387387
}
388388
}
389389
}

Sources/ErrorKit/BuiltInErrors/DatabaseError.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ public enum DatabaseError: Throwable, Catching {
157157
case .generic(let userFriendlyMessage):
158158
return userFriendlyMessage
159159
case .caught(let error):
160-
return error.localizedDescription
160+
return ErrorKit.userFriendlyMessage(for: error)
161161
}
162162
}
163163
}

Sources/ErrorKit/BuiltInErrors/FileError.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ public enum FileError: Throwable, Catching {
148148
case .generic(let userFriendlyMessage):
149149
return userFriendlyMessage
150150
case .caught(let error):
151-
return error.localizedDescription
151+
return ErrorKit.userFriendlyMessage(for: error)
152152
}
153153
}
154154
}

Sources/ErrorKit/BuiltInErrors/GenericError.swift

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@ import Foundation
1515
/// userFriendlyMessage: String(localized: "The business data doesn't meet required criteria")
1616
/// )
1717
/// }
18-
/// // Continue with business logic
18+
///
19+
/// // Automatically wrap any other errors if needed
20+
/// try GenericError.catch {
21+
/// try validateAdditionalRules(data)
22+
/// }
1923
/// }
2024
/// }
2125
/// ```
@@ -33,7 +37,7 @@ import Foundation
3337
/// }
3438
/// }
3539
/// ```
36-
public struct GenericError: Throwable {
40+
public struct GenericError: Throwable, Catching {
3741
/// A user-friendly message describing the error.
3842
public let userFriendlyMessage: String
3943

@@ -56,4 +60,30 @@ public struct GenericError: Throwable {
5660
public init(userFriendlyMessage: String) {
5761
self.userFriendlyMessage = userFriendlyMessage
5862
}
63+
64+
/// Creates a new generic error that wraps another error.
65+
/// Used internally by the ``catch(_:)`` function to automatically wrap any thrown errors.
66+
///
67+
/// # Example
68+
/// ```swift
69+
/// struct FileProcessor {
70+
/// func processUserData() throws(GenericError) {
71+
/// // Explicit throwing for validation
72+
/// guard isValidPath(userDataPath) else {
73+
/// throw GenericError(userFriendlyMessage: "Invalid file path selected")
74+
/// }
75+
///
76+
/// // Automatically wrap any file system or JSON errors
77+
/// let userData = try GenericError.catch {
78+
/// let data = try Data(contentsOf: userDataPath)
79+
/// return try JSONDecoder().decode(UserData.self, from: data)
80+
/// }
81+
/// }
82+
/// }
83+
/// ```
84+
///
85+
/// - Parameter error: The error to be wrapped.
86+
public static func caught(_ error: Error) -> Self {
87+
GenericError(userFriendlyMessage: ErrorKit.userFriendlyMessage(for: error))
88+
}
5989
}

Sources/ErrorKit/BuiltInErrors/NetworkError.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ public enum NetworkError: Throwable, Catching {
215215
case .generic(let userFriendlyMessage):
216216
return userFriendlyMessage
217217
case .caught(let error):
218-
return error.localizedDescription
218+
return ErrorKit.userFriendlyMessage(for: error)
219219
}
220220
}
221221
}

Sources/ErrorKit/BuiltInErrors/OperationError.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ public enum OperationError: Throwable, Catching {
122122
case .generic(let userFriendlyMessage):
123123
return userFriendlyMessage
124124
case .caught(let error):
125-
return error.localizedDescription
125+
return ErrorKit.userFriendlyMessage(for: error)
126126
}
127127
}
128128
}

Sources/ErrorKit/BuiltInErrors/ParsingError.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ public enum ParsingError: Throwable, Catching {
122122
case .generic(let userFriendlyMessage):
123123
return userFriendlyMessage
124124
case .caught(let error):
125-
return error.localizedDescription
125+
return ErrorKit.userFriendlyMessage(for: error)
126126
}
127127
}
128128
}

Sources/ErrorKit/BuiltInErrors/PermissionError.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public enum PermissionError: Throwable, Catching {
149149
case .generic(let userFriendlyMessage):
150150
return userFriendlyMessage
151151
case .caught(let error):
152-
return error.localizedDescription
152+
return ErrorKit.userFriendlyMessage(for: error)
153153
}
154154
}
155155
}

Sources/ErrorKit/BuiltInErrors/StateError.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ public enum StateError: Throwable, Catching {
142142
case .generic(let userFriendlyMessage):
143143
return userFriendlyMessage
144144
case .caught(let error):
145-
return error.localizedDescription
145+
return ErrorKit.userFriendlyMessage(for: error)
146146
}
147147
}
148148
}

Sources/ErrorKit/BuiltInErrors/ValidationError.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ public enum ValidationError: Throwable, Catching {
156156
case .generic(let userFriendlyMessage):
157157
return userFriendlyMessage
158158
case .caught(let error):
159-
return error.localizedDescription
159+
return ErrorKit.userFriendlyMessage(for: error)
160160
}
161161
}
162162
}

0 commit comments

Comments
 (0)