{-# LANGUAGE DeriveDataTypeable #-}
module Network.Mom.Stompl.Client.Exception (
StomplException(..), try, convertError)
where
import Control.Exception hiding (try)
import Control.Applicative ((<$>))
import Data.Typeable (Typeable)
data StomplException =
SocketException String
| WorkerException String
| ProtocolException String
| QueueException String
| TxException String
| ConnectException String
| ConvertException String
| BrokerException String
| AppException String
| OuchException String
deriving (Int -> StomplException -> ShowS
[StomplException] -> ShowS
StomplException -> String
(Int -> StomplException -> ShowS)
-> (StomplException -> String)
-> ([StomplException] -> ShowS)
-> Show StomplException
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [StomplException] -> ShowS
$cshowList :: [StomplException] -> ShowS
show :: StomplException -> String
$cshow :: StomplException -> String
showsPrec :: Int -> StomplException -> ShowS
$cshowsPrec :: Int -> StomplException -> ShowS
Show, ReadPrec [StomplException]
ReadPrec StomplException
Int -> ReadS StomplException
ReadS [StomplException]
(Int -> ReadS StomplException)
-> ReadS [StomplException]
-> ReadPrec StomplException
-> ReadPrec [StomplException]
-> Read StomplException
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [StomplException]
$creadListPrec :: ReadPrec [StomplException]
readPrec :: ReadPrec StomplException
$creadPrec :: ReadPrec StomplException
readList :: ReadS [StomplException]
$creadList :: ReadS [StomplException]
readsPrec :: Int -> ReadS StomplException
$creadsPrec :: Int -> ReadS StomplException
Read, Typeable, StomplException -> StomplException -> Bool
(StomplException -> StomplException -> Bool)
-> (StomplException -> StomplException -> Bool)
-> Eq StomplException
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: StomplException -> StomplException -> Bool
$c/= :: StomplException -> StomplException -> Bool
== :: StomplException -> StomplException -> Bool
$c== :: StomplException -> StomplException -> Bool
Eq)
instance Exception StomplException
try :: IO a -> IO (Either StomplException a)
try :: IO a -> IO (Either StomplException a)
try IO a
act = (a -> Either StomplException a
forall a b. b -> Either a b
Right (a -> Either StomplException a)
-> IO a -> IO (Either StomplException a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO a
act) IO (Either StomplException a)
-> (StomplException -> IO (Either StomplException a))
-> IO (Either StomplException a)
forall e a. Exception e => IO a -> (e -> IO a) -> IO a
`catch` (Either StomplException a -> IO (Either StomplException a)
forall (m :: * -> *) a. Monad m => a -> m a
return (Either StomplException a -> IO (Either StomplException a))
-> (StomplException -> Either StomplException a)
-> StomplException
-> IO (Either StomplException a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. StomplException -> Either StomplException a
forall a b. a -> Either a b
Left)
convertError :: String -> IO a
convertError :: String -> IO a
convertError String
e = StomplException -> IO a
forall e a. Exception e => e -> IO a
throwIO (StomplException -> IO a) -> StomplException -> IO a
forall a b. (a -> b) -> a -> b
$ String -> StomplException
ConvertException String
e