Allow framework agnostic server side libraries to have a common error type while allowing easy error handling within the final app.
WebError libraries consist of three products:
VaporErrorKit - This library
NIOErrorKit - WebErrorKit extended for use with NIO
WebErrorKit - Base types, protocols and tools; to be used in libraries
Basic use
Conform your error to WebError from WebErrorKit package
If your error is a StringRawRepresentable (String enum) you get code property for free (see response output below)
enum MyError: String, WebError {
case somethingHasHappened
}
above error will generate following error response:
// Status 500
{
"code": "my_error.something_has_happened"
}
Custom use
enum MyError: String, WebError {
case somethingHasHappened
var statusCode: Int {
return 417
}
var reason: String? {
return "Something has happened!!!"
}
}
above error will generate following error response:
// Status 417
{
"code": "my_error.something_has_happened",
"reason": "Something has happened!!!"
}
Custom enum types
For errors that don’t conform to String and RawRepresentable you can use SerializableWebError as follows:
enum MyError: SerializableWebError {
case itsComplicated(complication: String)
var serializedCode: String {
switch self {
case .itsComplicated(complication: let c):
return "its_complicated:\(c)"
}
}
}
above error will generate following error response:
// Status 500
{
"code": "my_error.its_complicated:huge_problem"
}
Integration with Vapor
WebErrorMiddleware
Register WebErrorMiddleware in your configure method
s.register(MiddlewareConfiguration.self) { c in
// Create _empty_ middleware config
var middlewares = MiddlewareConfiguration()
// Catches errors and converts to HTTP response
try middlewares.use(c.make(WebErrorMiddleware.self))
return middlewares
}
Handling Swift.Error
Code of the error message will be “snake cased” type of the error
Status code is set to 500
Reason is localizedDescription
Handling Vapor.AbortError
Code of the error message will be “snake cased” type of the error while the reason and status code works the same
VaporErrorKit
Install using SPM
Concept
Allow framework agnostic server side libraries to have a common error type while allowing easy error handling within the final app.
WebError libraries consist of three products:
VaporErrorKit
- This libraryWebErrorKit
extended for use withNIO
Basic use
Conform your error to
WebError
fromWebErrorKit
packageabove error will generate following error response:
Custom use
above error will generate following error response:
Custom enum types
For errors that don’t conform to
String
andRawRepresentable
you can useSerializableWebError
as follows:above error will generate following error response:
Integration with Vapor
WebErrorMiddleware
Register
WebErrorMiddleware
in yourconfigure
methodHandling
Swift.Error
500
localizedDescription
Handling
Vapor.AbortError
Base error types.
Author
Ondrej Rafaj @rafiki270
License
MIT; Copyright 2019 - Einstore