Error handling: Introduce a WireGuardAppError protocol to manage errors
The alert strings shall be located next to where the errors are declared. Signed-off-by: Roopesh Chander <roop@roopc.net>
This commit is contained in:
@@ -7,8 +7,8 @@ import os.log
|
||||
class ErrorPresenter {
|
||||
static func errorMessage(for error: Error) -> (String, String) {
|
||||
|
||||
if let tunnelsManagerError = error as? TunnelsManagerError {
|
||||
return errorMessage(forTunnelsManagerError: tunnelsManagerError)
|
||||
if let error = error as? WireGuardAppError {
|
||||
return error.alertText()
|
||||
}
|
||||
|
||||
switch (error) {
|
||||
@@ -32,32 +32,6 @@ class ErrorPresenter {
|
||||
}
|
||||
}
|
||||
|
||||
private static func errorMessage(forTunnelsManagerError error: TunnelsManagerError) -> (String, String) {
|
||||
switch (error) {
|
||||
// Tunnels list management
|
||||
case TunnelsManagerError.tunnelNameEmpty:
|
||||
return ("No name provided", "Can't create tunnel with an empty name")
|
||||
case TunnelsManagerError.tunnelAlreadyExistsWithThatName:
|
||||
return ("Name already exists", "A tunnel with that name already exists")
|
||||
case TunnelsManagerError.vpnSystemErrorOnListingTunnels:
|
||||
return ("Unable to list tunnels", "Internal error")
|
||||
case TunnelsManagerError.vpnSystemErrorOnAddTunnel:
|
||||
return ("Unable to create tunnel", "Internal error")
|
||||
case TunnelsManagerError.vpnSystemErrorOnModifyTunnel:
|
||||
return ("Unable to modify tunnel", "Internal error")
|
||||
case TunnelsManagerError.vpnSystemErrorOnRemoveTunnel:
|
||||
return ("Unable to remove tunnel", "Internal error")
|
||||
|
||||
// Tunnel activation
|
||||
case TunnelsManagerError.tunnelActivationAttemptFailed:
|
||||
return ("Activation failure", "The tunnel could not be activated due to an internal error")
|
||||
case TunnelsManagerError.tunnelActivationFailedInternalError:
|
||||
return ("Activation failure", "The tunnel could not be activated due to an internal error")
|
||||
case TunnelsManagerError.tunnelActivationFailedNoInternetConnection:
|
||||
return ("Activation failure", "No internet connection")
|
||||
}
|
||||
}
|
||||
|
||||
static func showErrorAlert(error: Error, from sourceVC: UIViewController?,
|
||||
onDismissal: (() -> Void)? = nil, onPresented: (() -> Void)? = nil) {
|
||||
guard let sourceVC = sourceVC else { return }
|
||||
|
||||
@@ -16,7 +16,8 @@ protocol TunnelsManagerActivationDelegate: class {
|
||||
func tunnelActivationFailed(tunnel: TunnelContainer, error: TunnelsManagerError)
|
||||
}
|
||||
|
||||
enum TunnelsManagerError: Error {
|
||||
enum TunnelsManagerError: WireGuardAppError {
|
||||
// Tunnels list management
|
||||
case tunnelNameEmpty
|
||||
case tunnelAlreadyExistsWithThatName
|
||||
case vpnSystemErrorOnListingTunnels
|
||||
@@ -24,9 +25,34 @@ enum TunnelsManagerError: Error {
|
||||
case vpnSystemErrorOnModifyTunnel
|
||||
case vpnSystemErrorOnRemoveTunnel
|
||||
|
||||
// Tunnel activation
|
||||
case tunnelActivationAttemptFailed // startTunnel() throwed
|
||||
case tunnelActivationFailedInternalError // startTunnel() succeeded, but activation failed
|
||||
case tunnelActivationFailedNoInternetConnection // startTunnel() succeeded, but activation failed since no internet
|
||||
|
||||
func alertText() -> (String, String) {
|
||||
switch (self) {
|
||||
case .tunnelNameEmpty:
|
||||
return ("No name provided", "Can't create tunnel with an empty name")
|
||||
case .tunnelAlreadyExistsWithThatName:
|
||||
return ("Name already exists", "A tunnel with that name already exists")
|
||||
case .vpnSystemErrorOnListingTunnels:
|
||||
return ("Unable to list tunnels", "Internal error")
|
||||
case .vpnSystemErrorOnAddTunnel:
|
||||
return ("Unable to create tunnel", "Internal error")
|
||||
case .vpnSystemErrorOnModifyTunnel:
|
||||
return ("Unable to modify tunnel", "Internal error")
|
||||
case .vpnSystemErrorOnRemoveTunnel:
|
||||
return ("Unable to remove tunnel", "Internal error")
|
||||
|
||||
case .tunnelActivationAttemptFailed:
|
||||
return ("Activation failure", "The tunnel could not be activated due to an internal error")
|
||||
case .tunnelActivationFailedInternalError:
|
||||
return ("Activation failure", "The tunnel could not be activated due to an internal error")
|
||||
case .tunnelActivationFailedNoInternetConnection:
|
||||
return ("Activation failure", "No internet connection")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enum TunnelsManagerResult<T> {
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// Copyright © 2018 WireGuard LLC. All Rights Reserved.
|
||||
|
||||
protocol WireGuardAppError: Error {
|
||||
func alertText() -> (/* title */ String, /* message */ String)
|
||||
}
|
||||
Reference in New Issue
Block a user