module Network.Anonymous.Tor.Error where
import Data.Typeable (Typeable)
import Control.Monad.IO.Class
import Control.Exception (throwIO)
import Control.Exception.Base (Exception)
type TorError = TorException
data TorException = TorError {
toreType :: TorErrorType
} deriving (Show, Eq, Typeable)
instance Exception TorException
data TorErrorType
= Timeout
| Unreachable
| ProtocolError String
| PermissionDenied String
deriving (Show, Eq)
mkTorError :: TorErrorType -> TorError
mkTorError t = TorError { toreType = t }
timeoutErrorType :: TorErrorType
timeoutErrorType = Timeout
unreachableErrorType :: TorErrorType
unreachableErrorType = Unreachable
protocolErrorType :: String -> TorErrorType
protocolErrorType = ProtocolError
permissionDeniedErrorType :: String -> TorErrorType
permissionDeniedErrorType = PermissionDenied
torException :: (MonadIO m)
=> TorException
-> m a
torException = liftIO . throwIO
torError :: (MonadIO m)
=> TorError
-> m a
torError = torException