{-# LANGUAGE DeriveDataTypeable #-}
module BishBosh.Data.Exception(
BadData(),
BadRequest(),
Exception(
getType
),
mkDuplicateData,
mkIncompatibleData,
mkInsufficientData,
mkInvalidDatum,
mkNullDatum,
mkOutOfBounds,
mkRedundantData,
mkParseFailure,
mkRequestFailure,
mkResultUndefined,
mkSearchFailure,
isBadData,
isBadRequest
) where
import qualified Control.Exception
import qualified Data.Typeable
data BadData
= DuplicateData
| IncompatibleData
| InsufficientData
| InvalidDatum
| NullDatum
| OutOfBounds
| RedundantData
deriving Int -> BadData -> ShowS
[BadData] -> ShowS
BadData -> String
(Int -> BadData -> ShowS)
-> (BadData -> String) -> ([BadData] -> ShowS) -> Show BadData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [BadData] -> ShowS
$cshowList :: [BadData] -> ShowS
show :: BadData -> String
$cshow :: BadData -> String
showsPrec :: Int -> BadData -> ShowS
$cshowsPrec :: Int -> BadData -> ShowS
Show
data BadRequest
= ParseFailure
| RequestFailure
| ResultUndefined
| SearchFailure
deriving Int -> BadRequest -> ShowS
[BadRequest] -> ShowS
BadRequest -> String
(Int -> BadRequest -> ShowS)
-> (BadRequest -> String)
-> ([BadRequest] -> ShowS)
-> Show BadRequest
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [BadRequest] -> ShowS
$cshowList :: [BadRequest] -> ShowS
show :: BadRequest -> String
$cshow :: BadRequest -> String
showsPrec :: Int -> BadRequest -> ShowS
$cshowsPrec :: Int -> BadRequest -> ShowS
Show
data Exception = MkException {
Exception -> Either BadData BadRequest
getType :: Either BadData BadRequest,
Exception -> String
getDetails :: String
} deriving Data.Typeable.Typeable
instance Control.Exception.Exception Exception
instance Show Exception where
showsPrec :: Int -> Exception -> ShowS
showsPrec Int
_ MkException {
getType :: Exception -> Either BadData BadRequest
getType = Either BadData BadRequest
eitherBadDataOrBadRequest,
getDetails :: Exception -> String
getDetails = String
details
} = (BadData -> ShowS)
-> (BadRequest -> ShowS) -> Either BadData BadRequest -> ShowS
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either BadData -> ShowS
forall a. Show a => a -> ShowS
shows BadRequest -> ShowS
forall a. Show a => a -> ShowS
shows Either BadData BadRequest
eitherBadDataOrBadRequest ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
"; " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
details
mkDuplicateData :: String -> Exception
mkDuplicateData :: String -> Exception
mkDuplicateData = Either BadData BadRequest -> String -> Exception
MkException (Either BadData BadRequest -> String -> Exception)
-> Either BadData BadRequest -> String -> Exception
forall a b. (a -> b) -> a -> b
$ BadData -> Either BadData BadRequest
forall a b. a -> Either a b
Left BadData
DuplicateData
mkIncompatibleData :: String -> Exception
mkIncompatibleData :: String -> Exception
mkIncompatibleData = Either BadData BadRequest -> String -> Exception
MkException (Either BadData BadRequest -> String -> Exception)
-> Either BadData BadRequest -> String -> Exception
forall a b. (a -> b) -> a -> b
$ BadData -> Either BadData BadRequest
forall a b. a -> Either a b
Left BadData
IncompatibleData
mkInsufficientData :: String -> Exception
mkInsufficientData :: String -> Exception
mkInsufficientData = Either BadData BadRequest -> String -> Exception
MkException (Either BadData BadRequest -> String -> Exception)
-> Either BadData BadRequest -> String -> Exception
forall a b. (a -> b) -> a -> b
$ BadData -> Either BadData BadRequest
forall a b. a -> Either a b
Left BadData
InsufficientData
mkInvalidDatum :: String -> Exception
mkInvalidDatum :: String -> Exception
mkInvalidDatum = Either BadData BadRequest -> String -> Exception
MkException (Either BadData BadRequest -> String -> Exception)
-> Either BadData BadRequest -> String -> Exception
forall a b. (a -> b) -> a -> b
$ BadData -> Either BadData BadRequest
forall a b. a -> Either a b
Left BadData
InvalidDatum
mkNullDatum :: String -> Exception
mkNullDatum :: String -> Exception
mkNullDatum = Either BadData BadRequest -> String -> Exception
MkException (Either BadData BadRequest -> String -> Exception)
-> Either BadData BadRequest -> String -> Exception
forall a b. (a -> b) -> a -> b
$ BadData -> Either BadData BadRequest
forall a b. a -> Either a b
Left BadData
NullDatum
mkOutOfBounds :: String -> Exception
mkOutOfBounds :: String -> Exception
mkOutOfBounds = Either BadData BadRequest -> String -> Exception
MkException (Either BadData BadRequest -> String -> Exception)
-> Either BadData BadRequest -> String -> Exception
forall a b. (a -> b) -> a -> b
$ BadData -> Either BadData BadRequest
forall a b. a -> Either a b
Left BadData
OutOfBounds
mkRedundantData :: String -> Exception
mkRedundantData :: String -> Exception
mkRedundantData = Either BadData BadRequest -> String -> Exception
MkException (Either BadData BadRequest -> String -> Exception)
-> Either BadData BadRequest -> String -> Exception
forall a b. (a -> b) -> a -> b
$ BadData -> Either BadData BadRequest
forall a b. a -> Either a b
Left BadData
RedundantData
mkParseFailure :: String -> Exception
mkParseFailure :: String -> Exception
mkParseFailure = Either BadData BadRequest -> String -> Exception
MkException (Either BadData BadRequest -> String -> Exception)
-> Either BadData BadRequest -> String -> Exception
forall a b. (a -> b) -> a -> b
$ BadRequest -> Either BadData BadRequest
forall a b. b -> Either a b
Right BadRequest
ParseFailure
mkRequestFailure :: String -> Exception
mkRequestFailure :: String -> Exception
mkRequestFailure = Either BadData BadRequest -> String -> Exception
MkException (Either BadData BadRequest -> String -> Exception)
-> Either BadData BadRequest -> String -> Exception
forall a b. (a -> b) -> a -> b
$ BadRequest -> Either BadData BadRequest
forall a b. b -> Either a b
Right BadRequest
RequestFailure
mkResultUndefined :: String -> Exception
mkResultUndefined :: String -> Exception
mkResultUndefined = Either BadData BadRequest -> String -> Exception
MkException (Either BadData BadRequest -> String -> Exception)
-> Either BadData BadRequest -> String -> Exception
forall a b. (a -> b) -> a -> b
$ BadRequest -> Either BadData BadRequest
forall a b. b -> Either a b
Right BadRequest
ResultUndefined
mkSearchFailure :: String -> Exception
mkSearchFailure :: String -> Exception
mkSearchFailure = Either BadData BadRequest -> String -> Exception
MkException (Either BadData BadRequest -> String -> Exception)
-> Either BadData BadRequest -> String -> Exception
forall a b. (a -> b) -> a -> b
$ BadRequest -> Either BadData BadRequest
forall a b. b -> Either a b
Right BadRequest
SearchFailure
isBadData :: Exception -> Bool
isBadData :: Exception -> Bool
isBadData MkException { getType :: Exception -> Either BadData BadRequest
getType = Left BadData
_ } = Bool
True
isBadData Exception
_ = Bool
False
isBadRequest :: Exception -> Bool
isBadRequest :: Exception -> Bool
isBadRequest MkException { getType :: Exception -> Either BadData BadRequest
getType = Right BadRequest
_ } = Bool
True
isBadRequest Exception
_ = Bool
False