module Database.Memcache.Errors (
MemcacheError(..),
statusToError,
throwStatus,
throwIncorrectRes,
ClientError(..)
) where
import Database.Memcache.Types
import Control.Exception
import Data.Typeable
data MemcacheError
= MemErrNoKey
| MemErrKeyExists
| MemErrValueTooLarge
| MemErrInvalidArgs
| MemErrStoreFailed
| MemErrValueNonNumeric
| MemErrUnknownCmd
| MemErrOutOfMemory
| MemErrAuthFail
deriving (Eq, Show, Typeable)
instance Exception MemcacheError
statusToError :: Status -> MemcacheError
statusToError NoError = error "statusToError: called on NoError"
statusToError ErrKeyNotFound = MemErrNoKey
statusToError ErrKeyExists = MemErrKeyExists
statusToError ErrValueTooLarge = MemErrValueTooLarge
statusToError ErrInvalidArgs = MemErrInvalidArgs
statusToError ErrItemNotStored = MemErrStoreFailed
statusToError ErrValueNonNumeric = MemErrValueNonNumeric
statusToError ErrUnknownCommand = MemErrUnknownCmd
statusToError ErrOutOfMemory = MemErrOutOfMemory
statusToError SaslAuthFail = MemErrAuthFail
statusToError SaslAuthContinue = error "statusToError: called on SaslAuthContinue"
throwStatus :: Status -> IO a
throwStatus = throwIO . statusToError
throwIncorrectRes :: Response -> String -> IO a
throwIncorrectRes r msg = throwIO
IncorrectResponse {
increspMessage = "Expected " ++ msg ++ " response! Got: " ++ show (resOp r),
increspActual = r
}
data ClientError
= NotEnoughBytes
deriving (Eq, Show, Typeable)
instance Exception ClientError