module Data.KeyStore.Types.E
( E
, Reason
, E.strMsg
, rsaError
, eWrap
, showReason
) where
import Crypto.PubKey.RSA
import Data.Typeable
import qualified Control.Monad.Error as E
import qualified Control.Exception as X
import System.IO
import System.Exit
type E a = Either Reason a
data Reason
= R_RSA Error
| R_MSG String
| R_GEN
deriving (Typeable,Show)
instance X.Exception Reason
instance E.Error Reason where
noMsg = R_GEN
strMsg = R_MSG
rsaError :: Error -> Reason
rsaError = R_RSA
eWrap :: IO a -> IO a
eWrap p = X.catch p h
where
h = rpt . showReason
rpt s = hPutStrLn stderr s >> exitFailure
showReason :: Reason -> String
showReason r =
case r of
R_RSA e -> "error: " ++ show e
R_MSG s -> "error: " ++ s
R_GEN -> "error"