module Network.Anonymous.I2P.Error where
import Data.Typeable (Typeable)
import Control.Monad.IO.Class
import Control.Exception (throwIO)
import Control.Exception.Base (Exception)
type I2PError = I2PException
data I2PException = I2PError {
i2peType :: I2PErrorType
} deriving (Show, Eq, Typeable)
instance Exception I2PException
data I2PErrorType
= NoVersion
| DuplicatedSessionId
| DuplicatedDestination
| InvalidKey
| InvalidId
| Timeout
| Unreachable
| ProtocolError
| MessageTooLong
deriving (Show, Eq)
mkI2PError :: I2PErrorType -> I2PError
mkI2PError t = I2PError { i2peType = t }
noVersionErrorType :: I2PErrorType
noVersionErrorType = NoVersion
duplicatedSessionIdErrorType :: I2PErrorType
duplicatedSessionIdErrorType = DuplicatedSessionId
duplicatedDestinationErrorType :: I2PErrorType
duplicatedDestinationErrorType = DuplicatedDestination
invalidKeyErrorType :: I2PErrorType
invalidKeyErrorType = InvalidKey
invalidIdErrorType :: I2PErrorType
invalidIdErrorType = InvalidId
timeoutErrorType :: I2PErrorType
timeoutErrorType = Timeout
unreachableErrorType :: I2PErrorType
unreachableErrorType = Unreachable
messageTooLongErrorType :: I2PErrorType
messageTooLongErrorType = MessageTooLong
protocolErrorType :: I2PErrorType
protocolErrorType = ProtocolError
i2pException :: (MonadIO m)
=> I2PException
-> m a
i2pException = liftIO . throwIO
i2pError :: (MonadIO m)
=> I2PError
-> m a
i2pError = i2pException